使用gulp将多个json文件合并和编辑为一个文件

10

我对gulp有点了解,正在寻找合适的任务组合来读取n个格式相似的json文件,并从每个文件中提取特定的数组,将它们组合起来,并保存为一个新文件。我已经成功地使用gulp-concat来合并文件,使用gulp-json-editor来更改一个文件上的值,但是我很难理解如何将这些进程串起来。

n个json文件格式如下:

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

所需的单个文件输出包含所有“things”:

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

构建一个数组,其中每个条目表示一个文件作为字符串,然后将结果与类似 '{' + json_array.join(',') + '}' 的内容合并。或者,您可以加载/解析所有JSON文件,合并对象,然后将生成的对象写回作为JSON。 - joemaller
@joemaller - 但是我如何使用gulp插件来实现呢?如果我能在正确的位置使用正确的插件获取正确的流,我相信我可以构建数据结构。 - pleeschultz
1个回答

8

我花了一点时间搜索,最终找到了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"));

但是如果我只想合并目录中的两个文件怎么办?例如,我有一个文件夹来保存所有配置文件,其中一个是基础文件,其他是基于环境的文件,有时我想合并dev+base,有时是prod+base等等。这个包能做到吗? - Shlomi
@ShlomiSasson 你可以传入一个特定文件名/模式的数组。例如,gulp.src(['./file1.json', './base.json']) - JaredMcAteer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接