我想采用以下JSON并将其转换为多个dicts,这样我就可以只访问该环境的顶级节点下的每个设置。这是一个配置文件,它将维护不同环境的设置,我希望能够获取顶级节点/环境,然后使用仅适用于该环境的所有底层节点/设置。
我的示例JSON
{"默认":
{
"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" }
} }
我尝试通过拔出顶级密钥来实现这一点但却无法看到如何使用Python将它们分解为多个字典,因此我可以收集每个环境的设置并使用它们而不会重复。通过检查节点的len来检查我可以看到的底层节点,看看下面是否还有更多的节点,但是从顶层开始并将每个节点分成它自己的dict我无法解决。
或许有更好的方法来做到这一点,而不是我不知道的。下面的长度可能会有所不同,但如果我可以将它们分开,这应该是无关紧要的。
答案 0 :(得分:0)
你的问题确实令人困惑,但我会尝试一点猜测,让我们假设你有一个json文件(我将使用python3.x io.StringIO来模拟它)。
我假设您想知道如何将该文件加载到python字典中,使用json.load方法执行此操作并且您已经完成了很多工作。这是一个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)
答案 1 :(得分:0)
答案 2 :(得分:0)
将数据存储在如下变量中,并使用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)
答案 3 :(得分:0)
您需要json.loads()
将string
转换为json
对象。下面是打开文件的代码,并根据json的结构(在您的情况下为dict
)将json加载为list
或dict
import json
json_file = open('/path/to/config_file')
json_str = json_file.read()
json_data = json.loads(json_str)