我在python中有一个简单的json,看起来像:
{
"list": [{
"key1": "value1"
},
{
"key1": "value1"
}
]
}
我想将其转换为以下json。有什么建议可以在不安装其他库的情况下使用python进行操作吗?
{
"list": [{
"keys": {
"name": "key1",
"value": "value1"
}
}, {
"keys": {
"name": "key1",
"value": "value1"
}
}]
}
答案 0 :(得分:0)
从您的问题中不确定是否已经将json读入变量,或者它是否在文件中。假设您已经将其包含在变量中:
in_json = {
"list": [{
"key1": "value1"
},
{
"key2": "value2"
}
]
}
out_json = {"list":[]}
for kd in in_json["list"]:
sub_kd = {"keys": {}}
for k,v in kd.iteritems():
sub_kd["keys"]["name"] = k
sub_kd["keys"]["value"] = v
out_json["list"].append(sub_kd)
print(out_json)
它只是循环遍历json制作字典以追加到out_json
字典中。您可以使用json库使打印效果漂亮,并使用它保存到文件中
答案 1 :(得分:0)
您没有确切说明其中包含JSON数据的内容,因此我将其全部放在下面的示例代码中的字符串中,并使用http://127.0.0.1:4000函数将其转换为Python字典。如果在文件中,则可以使用模块的json.loads()
函数。
它还假设"list"
列表中的每个子JSON对象仅包含一个键/值对,如您的问题所示。
下面的代码就地更改了反序列化字典 ,并通过使用json.load()
函数对其进行了序列化,漂亮地打印了该结果。
请注意,我稍微更改了示例输入JSON中的键和值,以使其更易于查看其与打印结果之间的对应关系。
import json
json_in = '''
{
"list": [
{
"key1": "value1"
},
{
"key2": "value2"
}
]
}
'''
json_data = json.loads(json_in) # Deserialize.
for i, obj in enumerate(json_data['list']):
# Assumes each object in list contains only one key, value pair.
newobj = { 'name': next(iter(obj.keys())),
'value': next(iter(obj.values()))}
json_data['list'][i] = {'keys': newobj}
print(json.dumps(json_data, indent=4)) # Reserialize and print.
打印结果:
{
"list": [
{
"keys": {
"name": "key1",
"value": "value1"
}
},
{
"keys": {
"name": "key2",
"value": "value2"
}
}
]
}