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

2024-05-12 10:55:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获取以下JSON并将其转换为多个dict,这样我就可以仅针对该环境访问顶级节点下的每个设置。这是一个配置文件,将维护不同环境的设置,我想能够抓住一个顶级节点/环境,然后使用所有的基础节点/设置只为该环境。你知道吗

我的示例JSON

{ "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"
}

} }

我尝试通过拉出顶级键来实现这一点,但看不到如何使用Python将它们分解为多个字典,这样我就可以收集每个环境的设置并使用它们,而不会产生重复。我可以通过检查节点的长度来检查底层节点,看看下面是否还有更多的节点,但是从顶层开始,并将每个节点拆分为自己的dict,我无法计算出来。你知道吗

或者也许有一个更好的方法来做到这一点,比我不知道。下面的长度可能会有所不同,但如果我能把它们分开,那应该是无关紧要的。你知道吗


Tags: testbuildjson节点环境application配置文件xml
3条回答

你的问题确实让人困惑,但我会猜一点,假设你有一个json文件(我将使用python3.xio.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)

将上面的数据存储在下面这样的变量中,并使用json.loads文件 它将文本转换为字典,然后您可以基于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)

没有人能做到这一点

import json
my_dct = json.loads(json_string)

更多信息,请参见https://docs.python.org/3.5/library/json.html#json.loads

相关问题 更多 >