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

时间:2016-09-20 22:50:32

标签: python json dictionary configuration

我想采用以下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我无法解决。

或许有更好的方法来做到这一点,而不是我不知道的。下面的长度可能会有所不同,但如果我可以将它们分开,这应该是无关紧要的。

4 个答案:

答案 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)

有std lib能够做到这一点

$FreqShopPrice

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

答案 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加载为listdict

import json
json_file = open('/path/to/config_file')
json_str = json_file.read()
json_data = json.loads(json_str)