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