如何使用Python编辑JSON文件

2vuwiymt  于 2023-03-31  发布在  Python
关注(0)|答案(3)|浏览(155)

首先看一下我的JSON结构

{
    "some_id": [
        {
            "embed": False,
            "plain_msg": "Some text",
            "embed_text": [
                {
                    "title": "any title",
                    "body": "any bpdy text",
                    "color": "random color"
                }
            ]
        }
    ]
}

假设我有一个json文件filename.json,其中包含给定的json。现在我想更改embed的值,而不更改任何其他数据。
我有一个简单的密码

with open('filename.json', 'r') as f:
      json_data = json.load(f)
  json_data['some_id'] = 'Some string'
    with open('filename.json', 'w') as f:
      json.dump(json_data, f, indent=2)

但这段代码只能写在some_id内部,并将给定字符串的所有值重写为

{
    "some_id": "Some string"
}

请帮帮我我怎么能这样做!我需要你的帮助

aiqt4smr

aiqt4smr1#

json_data变成了一个与JSON结构相同的字典,要访问“inner”元素,只需浏览字典结构。
见下文评论。

with open('filename.json', 'r') as f:
      json_data = json.load(f)
  json_data['some_id'][0]['embed'] = 'Some string' # On this line you needed to add ['embed'][0]
    with open('filename.json', 'w') as f:
      json.dump(json_data, f, indent=2)
jslywgbw

jslywgbw2#

经过大量的测试和搜索,我得到了解决方案。
正确的代码是

with open('filename.json', 'r') as f:
    json_data = json.load(f)

json_data['some_id'][0]['embed'] = 'Some string'
with open('filename.json', 'w') as f:
    json.dump(json_data, f, indent=2)

它既不复制任何数据,也不删除任何现有的数据,只是改变。天哪,我终于得到了它。

9lowa7mx

9lowa7mx3#

如果我理解正确的话,你想编辑你已经拥有的文件('filename.json')上的值,而不是创建一个新文件,其中一个字段被编辑。
在这种情况下,您不需要嵌套的with open...结构。()方法。它将在“some_id”下,但该键包含一个包含一个元素的列表,因此您需要引用index 0。最后,index 0上的元素也是一个字典,其中存在“embed”键-这就是你想要改变的。
试试这个:

with open('filename.json', 'r+') as f:
      json_data = json.load(f)
      json_data['some_id'][0]['embed'] = 'Some string'
      json.dump(json_data, f, indent=2)

相关问题