【问题标题】:Python 2.7: Generate JSON file with multiple query results in nested dictPython 2.7:在嵌套字典中生成具有多个查询结果的 JSON 文件
【发布时间】:2017-12-12 06:09:00
【问题描述】:

最初是我个人的倡议,最终成为一个安静有趣(我可以说,在某种程度上具有挑战性)的项目。我的公司决定逐步淘汰一种产品并用新产品替换它,它不是将数据存储在 mdb 文件中,而是使用 JSON 文件。所以我主动创建了一个转换器,它将读取已经创建的 mdb 文件并将它们转换为新格式的 JSON。 但是,现在我对这个问题束手无策:

我可以读取 mdb 文件,运行查询以提取特定数据。 通过将 targetobj 放在 FOR LOOP 中,我设法为每一行提取数据并输入到 dict(targetobj)

for val in rows:    
   targetobj={"connection_props": {"port": 7800, "service": "", "host": val.Hostname, "pwd": "", "username": ""},
                        "group_list": val.Groups, "cpu_core_cnt": 2, "target_name": "somename", "target_type": "somethingsamething",
                        "os": val.OS, "rule_list": [], "user_list": val.Users}

如果我将 targetobj 打印到控制台,我可以清楚地获取每一行的所有提取值。

现在,我的任务是将获得的结果(对于每一行)插入到 targets:[] 键下的 main_dict 中。 (请参见 JSON 文件示例进行说明)

main_dict = {"changed_time": 0, "year": 0, "description": 'blahblahblah', 'targets':[应在此处添加 TARGETOBJ 的结果],"enabled": False}

例如,我的 Json 文件应该具有如下结构:

    {"changed_time":1234556,
"year":0,
"description":"blahblahblah",
    "targets":[
                {"group_list":["QA"],
                "cpu_core_cnt":1,
                "target_name":"NewTarget",
                "os":"unix",
                "target_type":"",
                "rule_list":[],
                "user_list":[""],"connection_props":"port":someport,"service":"","host":"host1","pwd":"","username":""}
                }, 
                {"group_list":[],
                "cpu_core_cnt":2,
                "target_name":"",
                "os":"unix",
                "target_type":"",
                "rule_list":[],
                "user_list":["Web2user"],   
                "connection_props":{"port":anotherport,"service":"","host":"host2","pwd":"","username":""}}
                ],
"enabled":false}

到目前为止,我一直在这里和那里进行调整,以按预期写入结果,但是每次,我只得到写入的最后一行值。 即:将targetobj作为变量放在目标中:[]

{"changed_time": 0, "year": 0, "description": 'ConvertedConfigFile', 'targets':[targetobj],

我知道我错过了一些东西,我只需要找到什么和在哪里。 任何帮助将不胜感激。 谢谢

【问题讨论】:

    标签: json python-2.7 dictionary


    【解决方案1】:

    只需先创建您的main_dict 并将其附加到您的循环中,即:

    main_dict = {"changed_time": 0,
                 "year": 0,
                 "description": "blahblahblah",
                 "targets": [],  # a new list for the target objects
                 "enabled": False}
    
    for val in rows:
        main_dict["targets"].append({  # append this dict to the targets list of main_dict
            "connection_props": {
                "port": 7800,
                "service": "",
                "host": val.Hostname,
                "pwd": "",
                "username": ""},
            "group_list": val.Groups,
            "cpu_core_cnt": 2,
            "target_name": "somename",
            "target_type": "somethingsamething",
            "os": val.OS,
            "rule_list": [],
            "user_list": val.Users
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2020-09-07
      • 2018-05-31
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多