#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'])