Использование gulp для объединения и редактирования нескольких файлов json в один

#json #gulp

#json #gulp

Вопрос:

Я немного увлекаюсь gulp, и я ищу правильную комбинацию задач, чтобы прочитать n файлов json аналогичного формата, извлечь из каждого определенный массив, объединить их и сохранить как новый файл. Я успешно использовал gulp-concat для объединения файлов и gulp-json-editor для изменения значений в одном файле, но мне трудно понять, как связать процессы вместе.

n количество файлов json, отформатированных следующим образом:

 {
    "id": "groupofthings1",
    "things": [
        { ... },
        { ... },
    ],
    ...
}
 

Желаемый вывод одного файла, содержащий все «вещи»:

 [
    { ... },
    { ... },
    { ... },
    { ... },
    ...
]
 

Комментарии:

1. Создайте массив, каждая запись которого представляет один из файлов в виде строки, затем объедините результат с чем-то вроде '{' json_array.join(',') '}' Или, вы можете просто загрузить / проанализировать все файлы JSON, объединить объекты, а затем записать полученный объект обратно в виде JSON.

2. @joemaller — Но как мне это сделать с помощью плагинов gulp? Я уверен, что смогу построить структуру данных, если смогу получить правильные потоки в нужных местах с помощью правильных плагинов.

Ответ №1:

Мне потребовалось немного поисков, но в итоге я нашел jsoncombine

Он загружает все файлы json и запускает их через пользовательскую функцию как хэш объектов json. Каждый объект json сохраняется под именем исходного файла.

 gulp.src("./groups/of/things/**/things.json")
.pipe(jsoncombine("all-things.json",function(data){
    // do any work on data here
    return new Buffer(JSON.stringify(data));
 }))
 .pipe(gulp.dest("./dest"));
 

Комментарии:

1. но если я хочу объединить только 2 файла в каталоге? например, у меня есть папка для хранения всех файлов конфигурации, один из его базовых файлов, а другие — файлы на основе env, иногда я хочу объединить dev base, иногда prod base и так далее. есть ли шанс сделать это с помощью этого пакета?

2. @ShlomiSasson вы можете передать массив определенных имен / шаблонов файлов. Например., gulp.src(['./file1.json', './base.json'])