如何将单引号的服务器响应解析为python3对象?

2022-09-28 20:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的文本是来自信用卡处理程序的沙盒帐户的响应。如何将此文本读入python3对象

我想我可以用双引号替换所有的单引号,然后使用json解析器,但是肯定有更好的方法可以避免文本中有撇号的风险

我试着把它当作字典来读

print(res['id'])

但这带来了一个例外:

string indices must be integers


{'client_id': None,
'created_at': '2019-01-15T02:36:16Z',
'id': 'QS9W1s0RMiHDKyu311U8sywpy9nyo0xMzPJfNmkzPSIDbjqXF0WFrLhO',
'location_id': 'CBASEBQ9PfySJ8Rm5hV7SfRtV-cgAQ',
'order_id': None,
'product': 'EXTERNAL_API',
 'reference_id': None,
 'refunds': None,
 'shipping_address': None,
 'tenders': [{'additional_recipients': None,
          'amount_money': {'amount': 20000, 'currency': 'USD'},
          'card_details': {'card': {'billing_address': None,
                                    'card_brand': 'VISA',
                                    'cardholder_name': None,
                                    'exp_month': None,
                                    'exp_year': None,
                                    'fingerprint':     'df1f5f029dcae0090e5ee877267c7863670d910f9b9d395e3315dea21f0f142a',
                                    'id': None,
                                    'last_4': '1111'},
                           'entry_method': 'KEYED',
                           'status': 'CAPTURED'},
          'cash_details': None,
          'created_at': '2019-01-15T02:36:16Z',
          'customer_id': None,
          'id': 'c0ea3992-8104-560a-75c4-5f88b4ba5c7b',
          'location_id': 'CBASEBQ9PfySJ8Rm5hV7SfRtV-cgAQ',
          'note': 'Online Transaction',
          'processing_fee_money': None,
          'tip_money': None,
          'transaction_id':     'QS9W1s0RMiHDKyu311U8sywpy9nyo0xMzPJfNmkzPSIDbjqXF0WFrLhO',
          'type': 'CARD'}]}

最终,我希望能够使用特定的键提取单个值。我该怎么做


Tags: 文本noneidaddresslocationdetailscard信用卡amountatcreatedmoneycbasebq9pfysj8rm5hv7sfrtvcgaqqs9w1s0rmihdkyu311u8sywpy9nyo0xmzpjfnmkzpsidbjqxf0wfrlho
1条回答
网友
1楼 ·

如果这是python原语值的repr转储,那么可以使用^{}

这是一种比使用eval()更安全的替代方法,后者可以在不受信任的输入上运行时执行任意代码

不过,最终还是最好在生成它的代码中修复它,以便它生成正确的JSON