在Python中按值搜索API返回的JSON
我正在使用Python2.7.12访问一个API,它给出了一个JSON响应。JSON如下所示:在Python中按值搜索API返回的JSON,python,json,Python,Json,我正在使用Python2.7.12访问一个API,它给出了一个JSON响应。JSON如下所示: { "Header": { "GeneratedAt": "2016-07-31T13:42:33", "PeriodA": { "startDate": "20160718", "type": "WEEKLY", "endDate": "20160724" }
{
"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”的值
到目前为止,我的代码是:
import json, requests
url = "https://something.com/blah-blah-blah/"
r = requests.get(url)
data = json.loads(r.text)
print json.dumps(data, indent=4)
我想继续做的是将“Sales”中的值“A”存储在一个名为totalSales的变量中,但需要知道从JSON响应中查询和提取单个数据值的最佳实践,如下面所示,这是API实际返回内容的一个非常精简的版本。
json.loads
为您提供了一个常规的Python嵌套字典,因此类似的内容应该可以工作(假设您想要的数据条目始终是第一个):
请注意,由于JSON的对象语法恰好与Python的字典语法相匹配,如果您想进行实验,可以将其粘贴到Python提示符中。假定顺序始终相同,您只需通过键访问,也不需要使用JSON。加载请求可以为您处理:
js = requests.get(url).json()
total_sales = js["Data"][0]['Metrics'][0]["values"]["A"]
print(total_sales)
如果顺序可能不同,只需迭代,直到找到dict,然后中断:
js = requests.get(url).json()
for dct in js["Data"][0]['Metrics']:
if dct.get("name") == "Sales":
total_sales = dct["values"]["A"]
break
我得到了以下错误:回溯(上次的最新调用):文件“C:/Python27/practice1.py”,第35行,totalSales=metric['A']KeyError:'A'>>>非常好,这是一个很好的解决方案,谢谢
js = requests.get(url).json()
for dct in js["Data"][0]['Metrics']:
if dct.get("name") == "Sales":
total_sales = dct["values"]["A"]
break