繁体   English   中英

在循环中解析嵌套的 json 数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM