【问题标题】:Error reading JSON file containing square brackets in Python在 Python 中读取包含方括号的 JSON 文件时出错
【发布时间】:2021-08-28 06:53:37
【问题描述】:

我需要修改另一个程序正在使用的 JSON 文件的值。它看起来像这样:

[
  {
  "ENABLED": "True",
  "NAME": "Cage",
  "CODE": "3928273",
  "COLOR": "Green"
  }
]

这会导致我的脚本(如下)抛出错误。如果我从原始 JSON 文件中删除方括号,它会完美运行。但问题是使用它的程序需要方括号。

我需要将修改后的值写回文件,并且 JSON 文件在我完成写入后必须包含方括号。我当前的无效代码是:

import json

with open('myfile.json', 'r+') as f:
    json_data = json.load(f)
    json_data['NAME'] = "Nick"
    f.seek(0)
    json.dump(json_data, f, indent=4)
    f.truncate()

我得到的错误是 "json_data['SYMBOL'] = "Nick" TypeError: list indices must be integers or slices, not str" 感谢您的帮助。谢谢。

【问题讨论】:

  • 你必须在第 4 行尝试json_data[0]['NAME'] = "Nick"
  • 您的字典在单元素列表中。
  • 作为一般建议:一旦你调用了json.load,你所拥有的只是一个普通的 Python 值,你可以使用 完全 i> 就好像您以 任何其他方式 获得了该数据,除了从 JSON 加载它。方括号表示一个 JSON 数组,它会变成一个 Python 列表。如果您还没有预料到,那么您可能真的需要更好地理解 JSON 格式本身。 (顺便说一句:square 标签用于无关的内容。当您在帖子中添加标签时,请阅读弹出的说明。)

标签: python json square-bracket


【解决方案1】:

由于使用方括号,需要访问里面的字典来修改NAME变量。只需在修改中的json_data['NAME'] 之间添加[0]。这将访问列表的第一个元素,即字典。

import json

with open('myfile.json', 'r+') as f:
    json_data = json.load(f)
    json_data[0]['NAME'] = "Nick"
    f.seek(0)
    json.dump(json_data, f, indent=4)
    f.truncate()

【讨论】:

  • 非常感谢!!!苦苦挣扎了很长时间,试图弄清楚这一点
  • @jedi2191 很高兴为您提供帮助!如果你愿意,你可以投票并接受这个答案。
猜你喜欢
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
相关资源
最近更新 更多