Python 在循环中解析嵌套的json数据
我想用以下结构解析json文件(数据字符串):Python 在循环中解析嵌套的json数据,python,json,Python,Json,我想用以下结构解析json文件(数据字符串): { "items1": { "item1": "value1", "item2": "value2" }, "items2": { "item" :"value12" }, "items3": "null" } 我的简单json解析器应该将所需值的路径(例如:[“items1”、“item1”])作为输入,并返回键的值 # call get_json_value(["items1", "item
{
"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
当我运行你的代码时,我似乎没有遇到同样的问题。您认为您可以发布完整错误吗?您是否因路径无效/项目不存在而面临此问题?作为一个次要问题,
value
的目的是什么?你可以使用tmp
。你问题中的代码对我有用(在我添加了缺失的片段之后)。请回答您的问题,并提供一个说明问题的示例。我的json字符串中有一个错误。。。