簡體   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