Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python将JSON转换为多个dictonary_Python_Json_Dictionary_Configuration - Fatal编程技术网

如何使用Python将JSON转换为多个dictonary

如何使用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" }

我希望使用以下JSON并将其转换为多个DICT,这样我就可以仅针对该环境访问顶级节点下的每个设置。这是一个配置文件,将维护不同环境的设置,我希望能够获取顶级节点/环境,然后仅为该环境使用所有底层节点/设置

我的示例是JSON

{“默认”:

{

"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)