在Python中使用变量键导航JSON ?



假设我有一些json文件存储在变量data

{
"print": {
"ams": { "exists": 1},
"fan_speed": 29,
"reports": [
{"name": "foo"},
{"name": "bar"}
]
}
}

现在我有一个变量,它是我想要返回的键存储在一个名为key的变量中例如print.fan_speed,print.ams.exists,print.reports[0].name

我想要的是data.get(key)之类的东西。解决这个问题的最佳方法是什么?

下面的代码应该在你的数据中工作,包括在列表中建立索引:

import re
data = {
"print": {
"ams": { "exists": 1},
"fan_speed": 29,
"reports": [
{"name": "foo"},
{"name": "bar"}
]
}
}
def value_of(data, location):
for part in location.split("."):
match = re.match(r"(.*)[(d+)]$", part)
if match:
name, index = match.groups()
data = data.get(name)[int(index)]
else:
data = data.get(part)
if not data:
return None
return data
print(value_of(data, "print.ams.exists"))
print(value_of(data, "print.reports[1].name"))

结果:

1
bar

它可以做一点合理化,因为它将为不存在的键返回None,但会在错误的索引上出错-它应该根据您的要求执行一个或另一个,但概念是存在的。

概念是取每个'。字符串的'分隔元素,使用它进一步挖掘数据结构。如果该元素使用正则表达式匹配'name[index]'的语法,则该组件将被视为列表,并提取第indexth元素。

最新更新