这是我从其他地方获取的一个结构,即嵌套字典的列表:
{
"foo_code": 404,
"foo_rbody": {
"query": {
"info": {
"acme_no": "444444",
"road_runner": "123"
},
"error": "no_lunch",
"message": "runner problem."
}
},
"acme_no": "444444",
"road_runner": "123",
"xyzzy_code": 200,
"xyzzy_rbody": {
"api": {
"items": [
{
"desc": "OK",
"id": 198,
"acme_no": "789",
"road_runner": "123",
"params": {
"bicycle": "2wheel",
"willie": "hungry",
"height": "1",
"coyote_id": "1511111"
},
"activity": "TRAP",
"state": "active",
"status": 200,
"type": "chase"
}
]
}
}
}
{
"foo_code": 200,
"foo_rbody": {
"query": {
"result": {
"acme_no": "260060730303258",
"road_runner": "123",
"abyss": "26843545600"
}
}
},
"acme_no": "260060730303258",
"road_runner": "123",
"xyzzy_code": 200,
"xyzzy_rbody": {
"api": {
"items": [
{
"desc": "OK",
"id": 198,
"acme_no": "789",
"road_runner": "123",
"params": {
"bicycle": "2wheel",
"willie": "hungry",
"height": "1",
"coyote_id": "1511111"
},
"activity": "TRAP",
"state": "active",
"status": 200,
"type": "chase"
}
]
}
}
}
要求不同的结构是不可能的(遗留API等)。
因此,我想知道是否有一些巧妙的方法可以从这样的结构中提取选定的值。
我考虑过的候选方案:
展平特定的字典,建立复合键,如下所示:
{ "foo_rbody.query.info.acme_no": "444444", "foo_rbody.query.info.road_runner": "123", ... }
优点:通过一次访问获取每个值,如果没有可预测的键,则表示该结构不存在(您可能已经注意到,根据是否出现错误等不同,字典的结构可能不同)。
缺点:如何处理列表?
- 使用某个递归函数进行连续的键查找,例如按“foo_rbody”、然后按“query”、“info”等查找。
还有更好的方案吗?