TL; DR: 在这种情况下,混淆了如何解析以下JSON响应并获得[有效负载的dynamicValue_GGG的状态12345]。
完整的问题: 我通过以下Python代码点击REST API获得以下(清理)响应:
response = requests.request(“POST”,url,data = payload, 标题=报头)以.json()
{
"payload": {
"name": "asdasdasdasd",
"dynamicValue_GGG": {
"12345": {
"model": "asad",
"status": "active",
"subModel1": {
"dynamicValue_67890": {
"model": "qwerty",
"status": "active"
},
"subModel2": {
"dynamicValue_33445": {
"model": "gghjjj",
"status": "active"
},
"subModel3": {
"dynamicValue_66778": {
"model": "tyutyu",
"status": "active"
}
}
}
},
"date": "2016-02-04"
},
"design": "asdasdWWWsaasdasQ"
}
如果我执行type(response['payload'])
,它会给我'dict
'。
现在,我正在尝试解析上面的响应并从中获取某些键和值。问题是我无法迭代使用“索引”而是必须指定“密钥”,但是响应具有动态生成和发送的某些“密钥”。例如,与“dynamicValue_GGG
”键不同,名为“dynamicValue_66778
”,“status
”等的键不是静态的。
我可以通过提及如下来成功解析:
print response['payload']['dynamicValue_GGG']['12345'][status]
在这种情况下,我得到预期的输出='active
'。
但是,由于我无法控制“dynamicValue_GGG
”,因此只有在我可以指定类似的内容时才会有效:
print response['payload'][0][0][status]
但上面的行给出了错误:“KeyError: 0
”执行python代码时。
在这种情况下,我是否可以使用两个键的功能以及索引?
答案 0 :(得分:2)
Python中字典中值的顺序是随机的,因此您无法使用索引。你将不得不遍历所有元素,可能是递归的,并测试它是否是你正在寻找的东西。例如:
def find_submodels(your_dict):
for item_key, item_values in your_dict.items():
if 'status' in item_values:
print item_key, item_values['status']
if type(item_values) == dict:
find_submodels(item_values)
find_submodels(your_dict)
哪个会输出:
12345 active
dynamicValue_67890 active
dynamicValue_66778 active
dynamicValue_33445 active