Как обновить значение ключа в файле JSON, не загружая полный JSON в Python? - PullRequest
0 голосов
/ 27 ноября 2018

Учтите, что содержимое файла json перед обновлением равно

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

Я хочу обновить ключ1 до значения C без фактического открытия файла json с помощью json.load ().Таким образом, окончательный вывод должен быть

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

Я хочу что-то вроде update () в mongoDB.Это возможно через любую библиотеку?

1 Ответ

0 голосов
/ 29 ноября 2018

Все зависит от контекста задачи.Как я сказал в комментарии, вы можете использовать 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) + '}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...