在Python中按值搜索API返回的JSON

2024-09-26 22:42:16 发布

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

我正在使用python2.7.12访问一个API,它提供一个JSON响应。JSON看起来像这样:

{
    "Header": {
        "GeneratedAt": "2016-07-31T13:42:33", 
        "PeriodA": {
            "startDate": "20160718", 
            "type": "WEEKLY", 
            "endDate": "20160724"
        }
    }, 
    "Data": [
        {
            "Metrics": [
                {
                    "name": "Sales", 
                    "values": {
                        "A": "823456.32", 
                        "B": ""
                    }, 
                    "id": "TL_TOTAL_SALES"
                },
                {
                    "name": "Orders",
                    "values": {
                        "A": "1230",
                        "B": ""
                    },
                    "id": "TL_TOTAL_ORDERS"
                },
            ], 
            "label": "Commerce Metrics"
        },
     ]
} 

我使用Python将JSON解析为一个字符串,然后需要搜索JSON字符串并提取特定指标的值,因此在本例中,我需要度量“Sales”的值。在

目前我的代码:

^{pr2}$

我接下来要做的是将“Sales”中的值“A”存储在一个名为totalSales的变量中,但需要了解从JSON响应中查询和提取单个数据值的最佳实践,这是API实际返回内容的精简版本。在


Tags: 字符串nameapiidjsontypemetricstotal
2条回答

json.loads为您提供了一个常规的Python嵌套字典,因此类似这样的东西应该可以工作(假设您想要的数据条目总是第一个):

for metric in data['Data'][0]['Metrics']:
    if metric['name'] == "Sales":
        totalSales = metric['values']['A']

请注意,由于JSON对象的语法恰好与Python的字典语法相匹配,如果您想进行实验,可以将其粘贴到Python提示符中。在

假设顺序总是一样的,你只需通过键访问,你也不需要使用json.loadsas请求可以为您处理:

js = requests.get(url).json()

total_sales = js["Data"][0]['Metrics'][0]["values"]["A"]

print(total_sales)

如果顺序可能不同,只需迭代直到找到dict,然后断开:

^{pr2}$

相关问题 更多 >

    热门问题