К сожалению, JSON, как и XML, плохо подходит для потоковой обработки, поэтому почти во всех реализациях требуется, чтобы весь набор данных был загружен в память. Хотя это нормально для небольших наборов, в вашем случае нет другого выбора, кроме разбиения набора данных на более мелкие, управляемые куски.
В качестве улучшенного решения Pablo предлагается решение, которое не требует от вас фактического открытия и загрузки файла в редактор и разделения вручную, но пытается максимально автоматизировать весь процесс.
Скопируйте файл json на хост Unix (linux, osx) или установите инструменты cygwin в Windows. Затем откройте оболочку и используйте vim для удаления первой и последней строки из файла:
$ vim places.json
введите dd, чтобы удалить первую строку, затем SHIFT-G, чтобы переместить конец файла, снова введите dd, чтобы удалить последнюю строку. Теперь введите : wq, чтобы сохранить изменения. Это займет максимум пару минут.
Теперь мы будем использовать всю мощь Unix, чтобы разбить файл на более управляемые куски. В типе оболочки:
$ split -l 10000 places.json places-chunks-
Иди, возьми пиво. Это разделит файл на множество небольших файлов, каждый из которых содержит 10000 строк. Вы можете увеличить количество строк, если вы будете достаточно маленькими, чтобы ogr2gr мог управлять ими.
Теперь мы будем придерживаться головы и хвоста для каждого из файлов:
$ echo '{"type":"FeatureCollection","features":[' > head
$ echo ']}' > tail
$ for f in places-chunks-* ; do cat head $f tail > $f.json && rm -f $f ; done
Хватай змею. Первые две команды просто создают файл заголовка и нижнего колонтитула с правильным содержимым (просто для удобства), в то время как последняя добавит заголовок и нижний колонтитул к каждому фрагменту, который мы разделили выше, и удалит блок без заголовка / нижнего колонтитула (для экономии места). ).
В этот момент вы можете надеяться обработать множество мест-кусков - *. JsonТеперь файлов place .json с помощью ogr2ogr:
$ for f in places-chunks-*.json ; do ogr2ogr -your-options-here $f ; done