Python 在循环中解析嵌套的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

我想用以下结构解析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

当我运行你的代码时,我似乎没有遇到同样的问题。您认为您可以发布完整错误吗?您是否因路径无效/项目不存在而面临此问题?作为一个次要问题,
value
的目的是什么?你可以使用
tmp
。你问题中的代码对我有用(在我添加了缺失的片段之后)。请回答您的问题,并提供一个说明问题的示例。我的json字符串中有一个错误。。。