python - 使用python从嵌套的JSON中提取数据
问题描述
我希望有人可以帮助我解决我遇到的嵌套 JSON 响应的问题。我已经尝试破解这个几个星期了,但没有成功。
我正在尝试使用站点 API 创建一个字典,该字典可以为每个用户保存从 JSON 响应中提取的三条信息。第一个 JSON 响应包含我需要的用户 uid 和 crmid。
API 返回一个大型 JSON 响应,每个帐户都有一个对象。单个帐户的摘录如下所示:
{
'uid': 10,
'key':
'[
N@839374',
'customerUid': 11,
'selfPaid': True,
'billCycleAllocationMethodUid': 1,
'stmtPaidForAccount': False,
'accountInvoiceDeliveryMethodUid': 1,
'payerAccountUid': 0,
'countryCode': None,
'currencyCode': 'GBP',
'languageCode': 'en',
'customFields':
{
'field':
[{
'name': 'CRMID',
'value': '11001'
}
]
},
'consentDetails': [],
'href': '/accounts/10'}
我做了一个循环,为每个帐户提取每个 UID:
get_accounts = requests.get('https://website.com/api/v1/accounts?access_token=' + auth_key)
all_account_info = get_accounts.json()
account_info = all_account_info['resource']
account_information = {}
for account in account_info:
account_uid = account['uid']
我现在正在尝试提取 CRMID 值,在本例中为 '11001': {'name': 'CRMID', 'value': '11001'}。
我整个星期都在努力完成这项工作,我有两个问题:
我想从 JSON 响应中深度嵌套的“customFields”字典中提取 UID(我已经完成)和 CRMID。我设法到达 ['key'][0],但我不确定如何访问嵌套在列表中的下一个字典。
我想以以下格式将此信息存储在字典中:
{'accounts': [{'uid': 10, 'crmid': 11001, 'amount': ['bill': 4027]}{'uid': 11, 'crmid': 11002, 'amount': ['账单':1054]}]}
(“账单”信息将来自单独的 JSON 响应。)
我的问题是,对于我设计的每个循环,字典似乎只保存一个帐户/它循环的最后一个帐户。我想不出一种在使用循环时追加到字典而不是覆盖的方法。如果有人有关于如何做到这一点的有用链接,将不胜感激。
我的最终目标是拥有一个字典,其中包含每个帐户的三条信息(uid、crmid、bill)。然后,我将把它导出到 CSV 文档中。
任何帮助、指导、有用的链接等将不胜感激。
解决方案
关于问题 1,在您向下打印每个级别时可能会有所帮助,然后尝试找出如何访问您在该级别返回的对象。如果它是一个数组,它将使用像 [0] 这样的数字表示法,如果它是一个字典,它将使用像 ['key'] 这样的键表示法
关于问题 2,您的字典需要唯一键。您可能每次都在循环并替换整个内容。
您建议的最终结构有点偏离,将其想象为:
accounts: {
'10': {
'uid': '10',
'crmid': 11001,
'amount': {
'bill': 4027
}
},
'11': {
'uid': '11',
'crmid': 11011,
'amount': {
'bill': 4028
}
}
}
etc.
因此,您可以访问accounts['10']['crmid']
或accounts['10']['amount']['bill']
例如。
推荐阅读
- c++ - `return_if(cond, val)` 不借助宏
- jms - ActiveMQ Artemis 计划消息卡住
- asp.net-core - Net Core MemoryCache 在 Azure 中无法正常工作
- azure - Azure Devops:如何使用 if 语句设置组变量
- python - 在非数字的滚动窗口中取第一个值
- php - 查询数据 laravel
- sql - 如何比较多行的两个不同列的计数并仅查找不匹配项
- javascript - 元素ID值拉取JS
- c# - 设置 DataSource 时 DataGridView.Columns 引发异常
- sql-server - 以不同的方式显示数据