将数据附加到json文件

时间:2017-11-15 10:32:40

标签: python json

我有一个.json文件,现在看起来像这样:

{
    "users":
    [
        {"name" : "test"},
        {"name" : "test2"}
    ]
}

我想在{"name" : "test2}之后直接在Python中添加一行。 我发现的其他问题将给我这个解决方案:

{
    "users":
    [
        {"name" : "test"},
        {"name" : "test2"}
    ]
}{"name" : "test3"} # <-- Wrong place it shouldn't be here

这应该是这样的:

{
    "users":
    [
        {"name" : "test"},
        {"name" : "test2"},
        {"name" : "test3"}  # <-- new line here
    ]
}     # <-- not here

2 个答案:

答案 0 :(得分:2)

非常简单:解析你的json以获取一个Python对象,更新python对象,并将其转储回json。

bootstrap

我理解这对于初学者来说可能不那么明显,但是根据json规范,你可以很容易地理解为什么修改json内容的唯一可靠方法是实际解析它。正如您已经注意到的那样,附加到文件中将无法正常工作(您将获得无效的json)。尝试逐行读取文件,检测用户数组的结尾并在此处插入换行符也不会(或只是偶然)工作,因为json格式不会在任何地方强制换行,所以你也可以把所有东西塞进去一行即:

import json
with open("myfile.json") as f:
    obj = json.load(f)
obj["users"].append({"name":"was that so complicated, really ?"})
with open("myfile.json", "w") as f:
    json.dump(f, obj)

wrt / memory comsuption / perfs等,json不是为大型数据集而设计的(你想要jsonlines或类似的东西)所以你不应该担心它 - 这是你唯一的选择。

答案 1 :(得分:0)

这是一个可能的解决方案。

import json
# your string
json_string = '{
    "users":
      [
        {"name" : "test"},
        {"name" : "test2"}
      ]
    }'
# convert it to a python dictionary
json_dict = json.loads(json_string)
# append your data as {key:value}
json_dict['users'].append({'name':'test3'})
# convert it back to string
json_string = json.dumps(json_dict)
print (json_string)