在Python中按值返回的JSON返回值
我正在访问使用Python 2.7.12的API,它提供了JSON响应。该JSON看起来是这样的:在Python中按值返回的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”的值。
到目前为止我的代码:
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)
我想继续做的是价值“A”从一个变量称为totalSales“销售”存储,但需要知道查询的最佳实践和从这样的JSON响应中提取单个数据值,这是从API返回的实际版本。
。假定的顺序总是你只是键访问相同的,你也不需要使用json.loads作为请求可以处理你:
js = requests.get(url).json()
total_sales = js["Data"][0]['Metrics'][0]["values"]["A"]
print(total_sales)
如果顺序可以不同,只是重复,直到你找到那么字典破解:
js = requests.get(url).json()
for dct in js["Data"][0]['Metrics']:
if dct.get("name") == "Sales":
total_sales = dct["values"]["A"]
break
json.loads
为您提供了一个常规的Python嵌套字典,所以这样的事情应该工作(假设你想要的数据条目始终是第一位):
for metric in data['Data'][0]['Metrics']:
if metric['name'] == "Sales":
totalSales = metric['values']['A']
需要注意的是,因为JSON对对象语法发生匹配词典的Python语法,如果您想要实验,可以将其粘贴到Python提示符中。
我得到了以下错误:回溯(最近通话最后一个): 文件“C:/Python27/practice1.py” 35行,在
是的,我已经修复了。你可以再试一次吗? –
是的,这个作品现在太多了,也谢谢:-) – megatron77
优秀,工作和优雅的解决方案,谢谢 – megatron77
没有问题,您的欢迎。 –