[英]parse nested json data in loop
我想解析具有以下结构的 json 文件(数据字符串):
{
"items1": {
"item1": "value1",
"item2": "value2"
},
"items2": {
"item" :"value12"
},
"items3": "null"
}
我的简单 json 解析器应该获取所需值的路径(例如 ["items1", "item1"])作为输入并返回键的值。
# call get_json_value(["items1", "item1"]) should return value1
def get_json_value(path)
#get json data
json_data = json.load(get_data())
# search for specific value in json struct
value = None #return value with the json value if available
tmp = json_data
for item in path:
tmp = tmp[item]
value = tmp
return value
目前我的脚本没有按预期工作,因为我的搜索叶不是一个键值。 因此,for 循环中的最后一轮引发异常。 我该如何解决这个问题? 我的方法可能不是正确的...
您可以像这样简化代码:
import json
def get_json_value(path):
value = json.load(get_data())
for item in path:
value = value[item]
return value
或这个:
from functools import reduce
from operator import getitem
def get_json_value(path):
return reduce(getitem, path, json.load(get_data()))
假设您的问题是您将无效路径作为函数的参数。 在这种情况下,问题是,您的代码是否应该捕获此类异常? 如果是这样,您可以编写如下内容:
def get_json_value(path):
value = json.load(get_data())
for item in path:
if isinstance(value, dict):
try:
value = value[item]
except KeyError:
pass
else:
continue
raise ValueError(f'invalid path {item!r}')
return value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.