【发布时间】:2018-08-16 23:57:49
【问题描述】:
我调用了各种 API 端点,它们返回复杂程度各异的响应对象,我需要解析列表和/或字典的未知级别的嵌套数据结构。
例如,如果我得到一个响应并在此处将 json 转换为字典:
response = {
"key1":"value1",
"key2":"value2",
"key3":"value3",
"key4":[
"item1",
"item2"
],
"key5":"value4",
"key6":"value5",
"key7":{
"key1":"value1",
"key2":"value2",
"key3":"value3",
"key4":"value4",
"key5":"value5",
"key6":"value6"
},
"key8":"value6"
}
我下面的方法会起作用,因为它只处理嵌套深度一级的列表或字典:
def check_values(payload):
values = []
for value in payload.values():
if isinstance(value, list):
for item in value:
values.append(bool(item))
elif isinstance(value, dict):
for nested_value in value.values():
values.append(bool(nested_value))
else:
values.append(bool(value))
if all(values):
return True
return False
print(check_values(response))
但是,如果我有这样的东西,我上面的方法就行不通了:
response = {
"key1": {"foobar" : ["a", None, {"xyz": 123}]},
"key2":"value2",
"key3":"value3",
"key4":[
[4, 5, 6],
[[[[[[[[[[[[[[[[[[[["hi"]]]]]]]]]]]]]]]]]]]]
],
"key5":"value4",
"key6":"value5",
"key7":{
"key1":"value1",
"key2":"value2",
"key3":"value3",
"key4":"value4",
"key5":"value5",
"key6":"value6"
},
"key8":"value6"
}
任何想法或建议将不胜感激。 =)
【问题讨论】:
-
"key4":[ [4, 5, 6], [4] # 试试这个 ],因为列表是空的,也许这就是你得到 False ** bool([ ]) False**
-
@Tanmayjain,这是故意的,是为了展示我的方法的缺点。即使没有空列表,该方法仍应返回 False,因为 None 是嵌套列表中的项目
标签: python python-2.7