Python: синтаксический анализ JSON - PullRequest
0 голосов
/ 30 апреля 2020

У меня гигантский файл (размером в несколько ГБ). Он имеет сцепленный json, то есть несколько JSON спина к спине без разделителей (даже запятой или переводом строки).

Кто-нибудь знает, как я могу как-то разобрать это? json .load (fileobj) и json .loads (строка) завершаются ошибкой с «дополнительными данными», когда наступает вторая json в конкатенации.

Еще лучше, если решение позволяет для потоковой передачи символов из-за гигантского размера, но это не обязательно.

Редактировать: объединенный json равен https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON_2

1 Ответ

1 голос
/ 30 апреля 2020

Читайте файл символ за символом, записывая результат в файл. Также следите за уровнем отступа фигурной скобки.

Всякий раз, когда вы читаете символ }, который доводит уровень отступа до нуля, вы читаете весь объект json. Закройте файл, загрузите его с помощью json.load() и запустите новый файл.

Однако, если файл содержит кавычки или экранированные символы }, это решение слишком наивно и не будет работать; вам понадобится "настоящий" парсер.

...