python - 如何在不在 python 中加载完整的 json 的情况下更新 json 文件中键的值?

标签 python json performance

考虑一下,更新前json文件的内容是,

{"key1": "value A", "key2": "value B"}

我想在不使用 json.load() 实际打开 json 文件的情况下将 key1 更新为值 C。所以最终的输出应该是,

{"key1": "value C", "key2": "value B"}

我想要 mongoDB 中的 update() 之类的东西。是否可以通过任何图书馆?

最佳答案

这完全取决于任务的上下文。正如我在评论中所说,您可以使用 SAX 解析器而不是 DOM。它会阻止你在内存中构建巨大的模型。 SAX 解析器在事件(回调)驱动机制上工作。

另一种选择,如果您的 JSON 结构如所示的那样简单并且预计不会改变,您可以使用简单的正则表达式。下面的示例展示了这个想法,但要小心,它假设您的值始终采用 [\w\d\s]* 形式并且不包含引号和逗号。

import re

rx = r'\s*\"(\w\d+)\"\s*:\s*"([\w\d\s]*)"\s*'

with open('in.json') as inp:
  src_text = inp.read().strip(' \t\r\n{}')
  output = []
  for pair in src_text.split(','):
      m = re.match(rx, pair)
      key = m.group(1)
      val = m.group(2)
      output.append('"{}": "{}"'.format(key, 'value C' if key == 'key1' else val))
  with open('out.json', 'w') as outp:
      outp.write('{' + ', '.join(output) + '}')

关于python - 如何在不在 python 中加载完整的 json 的情况下更新 json 文件中键的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53495772/

相关文章:

php - 从数据库加载完整的 ID 列表或一次执行一条记录?什么是最好的?

performance - 加载顺序导致 Angular2 初始页面加载缓慢

python - 直到文件末尾才能让 Python 读取

python - sklearn.svm.SVC 没有给出稀疏数据集的支持向量索引?

javascript - 如何使用$.ajax从API接收JSON

json - 根据其他字段指定的类型读取 JSON 字段

python - 在这种情况下,Python 如何避免无限递归?

python - Python中的NameError,名称未定义

c# - C#中如何获取JSON中的值?

java - 更新字符串的有效方法是什么?