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

时间:2018-11-27 08:49:35

标签: python json performance

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

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

我想将key1更新为值C,而无需使用json.load()实际打开json文件。所以最终输出应该是

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

我想要mongoDB中的update()之类的东西。有可能通过任何图书馆吗?

1 个答案:

答案 0 :(得分:1)

这完全取决于任务的上下文。正如我在评论中告诉的那样,您可以使用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) + '}')