Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 13.07.2017
Сообщений: 63

Чтение и модификация больших JSON файлов

09.08.2022, 09:58. Показов 1359. Ответов 3

Студворк — интернет-сервис помощи студентам
Есть файлы JSON, в которым мне нужно найти определенные поля , модифицировать их и сохранить обратно. при небольших размерах это не составляет труда, но файлы по размеру могут доходить до 2 гигов и более. все мои поиски по этому делу так или иначе приводят к паре ответов на стаковерфлоу
(https://stackoverflow.com/ques... -in-node-j
https://stackoverflow.com/ques... -in-nodejs),
но у меня так и не получилось разобраться как со всем этим потом работать.
подключил все необходимые библиотеки (JSONStream и JSONStream event-stream)
прописал вот такой вариант

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
      var getStream = function () {
         var jsonData = _projArr[i], //тут просто полный путь до файла 
             stream = fs.createReadStream(jsonData, {encoding: 'utf8'}),
             parser = JSONStream.parse('layers.*');
             return stream.pipe(parser);
      };
 
      getStream()
      .pipe(es.mapSync(function (data) {
        console.log(data); //по идее тут должна быть обработка найденных вариантов
        //т.е. я могу отправить эти данные в какую нибудь другую асинхронную функцию и там с ними работать
      }));
по факту вроде получаю нужные объекты, которые еще то же нужно обработать, но если с обработкой я как нибудь справлюсь (если в console.log получаю данные, то думаю и обработку их туда же можно поместить), но возможно ли на лету изменять строку и записывать её в тот же файл?
т.е. у меня очень большая структура JSON (это проект анимации moho, в котором все данные по ключам и действиям записаны в виде JSON) и мне не надо изменять все, нужно только найти определенные пункты (path, image_path, relativeTo), считать с них данные (по факту я просто буду копировать картинки в новую папку и заменять тут пути) и сохранить новые данные (пути к картинкам) в то же место. вот не могу догнать как сохранить новые данные в то же место, откуда я их считал.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2022, 09:58
Ответы с готовыми решениями:

Чтение и модификация существующего json файла
Добрых времени суток. Появилась прочитать и модифицировать json файлик (ранее обходился только чтением/записью). Теперь Выглядит сам json...

Чтение больших файлов
Всем здрасте. Есть некая программка которая читает построчно текстовый файл, и обрабатывает каждую строку. Всё работает, но есть вопрос....

Чтение больших файлов
Всем привет Возник такой вопрос. Допустим, есть какой-то файл в 1 Тб. Если я открываю его для чтения, то получается, что этот файл...

3
2 / 2 / 0
Регистрация: 13.07.2017
Сообщений: 63
09.08.2022, 10:10  [ТС]
вот полный код

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
async function collectMohoProject(_path, _projArr){
//_path - новый путь
//_projArr - массив с путями до файлов JSON
   let fFolder = _path.substr(_path.lastIndexOf(_S)+1);
   for(let i = 0; i < _projArr.length; i++){
      let fName = _projArr[i].substr(_projArr[i].lastIndexOf(_S)+1);
      let newFile = _path + _S + fName;
      
      let getStream = function () {
         var jsonData = _projArr[i],
             stream = fs.createReadStream(jsonData, {encoding: 'utf8'}),
             parser = JSONStream.parse('layers.*');
             return stream.pipe(parser);
      };
 
      getStream()
      .pipe(es.mapSync(function (data) {
         console.log(data);
      }));
      
      console.log("до сюда доходит");
   }
}
и по факту получается вот такое. т.е. сперва доходит до конца цикла, а потом выдает результаты. и все выполнение тормозиться на этом моменте, т.е. после этого дальше не идет, а там еще другой код должен выполняться
Миниатюры
Чтение и модификация больших JSON файлов  
0
2 / 2 / 0
Регистрация: 13.07.2017
Сообщений: 63
09.08.2022, 10:41  [ТС]
и все это работает только с небольшими объемами. как только я ему подсунул большой файл (1,7Gb) - все сразу сдохло. в консоль вообще не выводится никаких результатов

Добавлено через 21 минуту
а нет, все работает, только нужно подождать. но это не проблема.
0
2 / 2 / 0
Регистрация: 13.07.2017
Сообщений: 63
11.08.2022, 15:06  [ТС]
в общем проблема пришла откуда не ждали... после парсинга JSON и обратного stingyfy() значения "1.0" превращаются в "1", что при открытии в программе приводит к ошибке. так что пошел другим путем, через line-stream. читаю построчно и обрабатываю только нужные мне элементы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2022, 15:06
Помогаю со студенческими работами здесь

Чтение больших файлов из blob
procedure TForm1.Button1Click(Sender: TObject); var RequestS,urlS:string; begin ADOQuery1.Active := false; ...

Запись и чтение больших файлов
Есть типизированный файл ( of byte )допустим размер от 1 до 200 мб. Надо считать его в массив, если пользоваться командой read (то есть для...

Чтение в память больших файлов
Привет. Имею след. код: int main(int argc, char* argv) { QCoreApplication a(argc, argv); QFile...

Многопоточное чтение больших файлов
Доброго времени суток! Нужен совет. Имеется, скажем, 10 текстовых файлов 1.txt;2.txt и т.д. и метод, которому на вход подаётся строка из...

Чтение больших текстовых файлов
Здравствуйте. Пишу алгоритм Хаффмана на Pascal ABC, и столкнулся с такой проблемой. Алгоритм проявляет себя адекватно лишь с большими...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru