考虑一下,更新之前的json文件的内容是
{"key1": "value A", "key2": "value B"}
我想将key1更新为值C,而无需使用json.load()实际打开json文件。所以最终输出应该是
{"key1": "value C", "key2": "value B"}
我想要mongoDB中的update()之类的东西。有可能通过任何图书馆吗?
答案 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) + '}')