将Python字典转换为未嵌套的JSON对象

时间:2019-07-10 20:48:19

标签: python json

我正在尝试使用带有key:数组对的Python字典作为构建数据库表的基础。字典的结构如下:


schema = {'names': ['Field1', 'Field2', 'Field3'], 'type': ['STRING', 'STRING', 'INTEGER']}

由于缺乏更好的措辞,我试图生成的结果JSON数据结构将是一系列JSON元素,如下所示:

[
    {
        'names': 'Field1',
        'type': 'STRING'
    },
    {
        'names': 'Field2',
        'type': 'STRING'
    },
    {
        'names': 'Field3',
        'type': 'INTEGER'
    }
]

我使用了json模块,并尝试如下进行操作:

import json
schema = {'names': ['Field1', 'Field2', 'Field3'], 'type': ['STRING', 'STRING', 'INTEGER']}
json.dumps(schema)

但是,它给了我

'{"names": ["Field1", "Field2", "Field3"], "type": ["STRING", "STRING", "INTEGER"]}'

我可以通过使用{}.format(..)构造字符串来做到这一点,但是我想看看是否有更有效的方法。我已经搜索了许多线程,但是大多数线程似乎都与我试图做的相反。

有指针吗?

干杯。

3 个答案:

答案 0 :(得分:1)

您可以将namestypes数组压缩在一起,并将其传递给列表理解器以制作字典和数组。然后转储到JSON:

import json
schema = {'names': ['Field1', 'Field2', 'Field3'], 'type': ['STRING', 'STRING', 'INTEGER']}

# assuming values is just those two lists otherwise spell out explicitly:
l = [{"names":name, "type":field} for name, field in zip(*schema.values())] 

json.dumps(l)

结果:

'[{"names": "Field1", "type": "STRING"}, {"names": "Field2", "type": "STRING"}, {"names": "Field3", "type": "INTEGER"}]'

答案 1 :(得分:0)

使用#include <stdlib.h> 获取名称/类型对并建立小词典列表:

zip()

答案 2 :(得分:0)

通过直接在for循环中访问字典,您可以匹配namestype的每个元素:

schema = {'names': ['Field1', 'Field2', 'Field3'], 'type': ['STRING', 'STRING', 
'INTEGER']}
output = []
names = schema["names"]
type = schema["type"]

for i in range(len(schema["names"])):
    output.append({"names": names[i], "type": type[i]})

print(output)

输出:

[{'names': 'Field1', 'type': 'STRING'}, {'names': 'Field2', 'type': 'STRING'}, {'names': 'Field3', 'type': 'INTEGER'}]