如何使用Python将JSON转换为多个dictonary
我希望使用以下JSON并将其转换为多个DICT,这样我就可以仅针对该环境访问顶级节点下的每个设置。这是一个配置文件,将维护不同环境的设置,我希望能够获取顶级节点/环境,然后仅为该环境使用所有底层节点/设置 我的示例是JSON {“默认”: {如何使用Python将JSON转换为多个dictonary,python,json,dictionary,configuration,Python,Json,Dictionary,Configuration,我希望使用以下JSON并将其转换为多个DICT,这样我就可以仅针对该环境访问顶级节点下的每个设置。这是一个配置文件,将维护不同环境的设置,我希望能够获取顶级节点/环境,然后仅为该环境使用所有底层节点/设置 我的示例是JSON {“默认”: { "build": { "projectKey": "TEST", "buildKey": "ME" }, "headers": { "json": "application/json", "xml": "application/xml" }
"build": {
"projectKey": "TEST",
"buildKey": "ME"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
},
“开发”:{
},
“质量保证”:{
}
}
我试图通过拔出顶级键来实现这一点,但看不到如何使用Python将它们分解为多个字典,以便收集每个环境的设置并使用它们而不会重复。我可以通过检查节点的len来检查底层节点,看看下面是否还有其他节点,但从顶层开始,将每个节点拆分为自己的dict,我无法计算
或者也许有一种比我所不知道的更好的方法来做到这一点。下面的长度可能会有所不同,但如果我可以将其拆分,这应该是无关紧要的。您的问题确实令人困惑,但我会尝试猜测一下,假设您有一个json文件(我将使用python3.x模拟) 我假设您想知道如何将该文件加载到python字典中,并使用该方法完成该操作,您已经完成了很多工作。下面是一个mcve示例,演示如何加载假设文件,然后使用不同的配置对其进行处理:
import json
import io
f = io.StringIO("""{
"default": {
"build": {
"projectKey": "TEST",
"buildKey": "ME"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
},
"dev": {
"build": {
"projectKey": "TEST",
"buildKey": "YOU"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
},
"qa": {
"build": {
"projectKey": "TEST",
"buildKey": "THEM"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
}
}""")
def processor(config, stage):
print('----Processing stuff for {0} server----'.format(stage))
print(config[stage])
print('----End----')
config = json.load(f)
for stage in ['default', 'dev', 'qa']:
processor(config, stage)
有一个std lib可以做到这一点
import json
my_dct = json.loads(json_string)
有关更多信息,请参见将上述数据存储在下面这样的变量中,并使用json.loads将其转换为dict 它将文本转换为字典,然后您可以基于env循环字典以获取属性
text='''
{ "default":
{
"build": {
"projectKey": "TEST",
"buildKey": "ME"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
},
"dev": {
"build": {
"projectKey": "TEST",
"buildKey": "YOU"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
},
"qa": {
"build": {
"projectKey": "TEST",
"buildKey": "THEM"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
} }'''
import json
dict=json.loads(text)
您需要json.loads()
将字符串
转换为json
对象。下面是打开文件并根据json结构将json加载为dict
或list
(在您的示例中为dict
)
“将它展平成一个dict”-你必须解释一下你的实际意思。@user2357112这能让它更清楚吗?扁平化是我开始考虑的一个术语,而不是JSON节点。不该在这里用的不,现在还不清楚。您认为“JSON节点”是什么?为什么您认为您还没有dict?听起来你已经有了一个dict,或者你有了一个字符串,在这种情况下,你可以使用
json.loads(你的_字符串)
来解析它并得到一个dict,但听起来你好像已经有了一个dict。听起来你可能只需要更加熟悉循环和索引。例如,您可以在目录项()中使用For env\u name,env\u settings(
)对目录项进行迭代。这实际上非常接近我想要做的…谢谢
import json
my_dct = json.loads(json_string)
text='''
{ "default":
{
"build": {
"projectKey": "TEST",
"buildKey": "ME"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
},
"dev": {
"build": {
"projectKey": "TEST",
"buildKey": "YOU"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
},
"qa": {
"build": {
"projectKey": "TEST",
"buildKey": "THEM"
},
"headers": {
"json": "application/json",
"xml": "application/xml"
}
} }'''
import json
dict=json.loads(text)
import json
json_file = open('/path/to/config_file')
json_str = json_file.read()
json_data = json.loads(json_str)