Py学习  »  Python

用Python扩展JSON文件

Cal Blau • 4 年前 • 1015 次点击  

我在stackoverflow上查找了我的问题,有几种解决方法对我的问题不起作用。
我想在json文件中添加一些新条目。

我的json文件(data.json):

{
        "blabla1":"dubdub1",
        "blabla2":"dubdub2"
}

我的代码(使用 延伸 方法):

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)
result = list()

result.extend(data)
result.extend({'blabla3': 'dubdub3'})
data = result

print(data)

这给了我一个输出如下:

['blabla1', 'blabla2', 'blabla3']

我的代码(使用 追加 方法):

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)
result = list()

result.append(data)
result.append({'blabla3': 'dubdub3'})
data = result

print(data)

这给了我一个输出如下:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}, {'blabla3': 'dubdub3'}]

最后我需要的是:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2', 'blabla3': 'dubdub3'}]

那我错在哪里呢?如果同样的问题已经被回答了,我很抱歉,但是我找不到对我有用的东西。谢谢您!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52050
 
1015 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Matan Zohar
Reply   •   1 楼
Matan Zohar    4 年前

在不改变代码的情况下,您可以像这样实现最初的请求:

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)

data.update({'blabla3': 'dubdub3'})
result = [data]

print(result)

这将产生您预期的结果:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2', 'blabla3': 'dubdub3'}]


简要说明:

方法 json.load文件 你调用了created a dictionary对象 数据 看起来是这样的:

{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}

然后打电话 result.append(数据) 你添加了 数据 字典作为列表对象中的第一个公民 结果 :

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}]

每隔一次你打电话给 附加() 方法您只需将另一个成员添加到列表中:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}, obj2, obj3, ...]

相反,您似乎希望向数据字典中添加另一个键值对,如 previous answer

Iain Shelvington
Reply   •   2 楼
Iain Shelvington    4 年前

这更接近你想要的吗?用新的键和值更新的字典

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)
data['blabla3'] = 'dubdub3'
print(data)  # {'blabla1': 'dubdub1', 'blabla2': 'dubdub2', 'blabla3': 'dubdub3'}

编辑:

要同时更新多个条目,可以使用 update

data.update({
    'blabla3': 'dubdub3',
    'blabla4': 'dubdub4',
})