【问题标题】:How to modify a JSON file using Python without losing comments in the file如何使用 Python 修改 JSON 文件而不丢失文件中的注释
【发布时间】:2022-01-01 00:01:39
【问题描述】:

我有一个settings.json 文件,其中包含有用的 cmets(有时是 C 风格,有时是 Python),我正在以编程方式修改它们,例如json 库,但是当我保存修改后的库时,我丢失了所有解释字段的 cmets。另一个不便之处是丢失了其中的缩进和间距。

是否有以编程方式修改文件的“简洁”方式?

【问题讨论】:

  • json 文件不可能有 cmets 并且仍然是兼容的 json。所以,这是不可能的
  • 当然不是内置 json 模块,它(像 JSON 本身一样)不支持 cmets。不过它可以很好地打印到文件中,所以不清楚你在那里遇到了什么问题。
  • @jonrsharpe 所以,你是说它必须是一些混乱的文本解析解决方案?
  • 好吧,或者找一个确实支持 cmets 的 Python JSON 库。
  • @jonrsharpe,找不到支持 cmets 的 json 库。如果您允许 C 风格的 cmets,那不再是 json,而是其他东西(json5、yaml 等)

标签: python json


【解决方案1】:

标准的 json 文件不可能有 cmets 并且仍然是兼容的 json。

还有另一种格式旨在解决此问题:json5。它具有旨在保持 json5 属性(如 cmets)完整的库 - 您可以为它提供 python 库here

另一种方法是继续使用标准 JSON,但为每个有问题的 JSON 块添加 "doc" 字段。在这种情况下,doc 字段将成为数据有效负载,并将在任何转换中存活。例如,Apache Avro 正在使用 doc 字段来记录 avro 架构。

【讨论】:

  • 它用C风格的cmets无缝解析jsons,但是cmets不见了。我开始意识到不可能将它们设为 json 格式。
  • 我经常使用的在 json 中包含 cmets 的一种解决方案是为每个有问题的块添加 "doc" 字段。在这种情况下,doc 字段成为数据有效负载,并且将在任何转换中存活。例如,Apache Avro 正在为其架构使用 doc 字段
  • 整洁!我会遵循这个,但我必须将现有文件强制转换为这种格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2012-01-06
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多