【发布时间】:2017-01-01 03:49:10
【问题描述】:
情况如下:我正在尝试将 2,089 个 JSON 文件合并到一个 JSON 文件中。它们都位于一个名为“贷方”的目录中。
我尝试了几个 Python 脚本,但现在我想使用名为 gulp-merge-json 的 gulp 模块(现在已经多次推荐)。
我运行 gulp 任务,加载时间表明它确实在处理所有 2,000 多个文件(与我仅对 3 个文件进行的测试相比,它有效);但我生成的文件仅包含来自单个文件的 JSON 数据。更奇怪的是(可能是对解决方案的暗示)正在使用的文件名为 999.json。这些文件都命名为 x.json,其中 1
我没有在数据中看到任何会导致此错误的突出内容。文件 999 似乎没有任何其他方面的例外,除了它显然具有最高的总结性标题价值。
够了;这是代码:
gulp.src('/Users/me/Documents/lenders/*.json')
.pipe(merge('combined.json'))
.pipe(gulp.dest('/Users/me/Documents/LendersData'));
把它放在一个包含所有正确安装依赖项的 gulpfile 中,它就会运行。简而言之,这个过程(假定)使用 json 指示的 glob 获取 lenders 目录中的所有文件,创建一个名为 LendersData 的目录,并将 combine.json 文件放入其中。
有人对这个 gulp 模块有经验吗?我不知道为什么根据我提供给它的输入数据量(在千兆字节范围内的某个地方)来判断运行任务需要花费大量时间,然后只剩下来自 999.json 的数据。谢谢!
编辑:我对 3 个 JSON 文件的测试不起作用。 1.json、2.json 和 3.json 中唯一写入输出文件的文件是 3.json。现在,这表明只有脚本读取的最后一个文件被复制。对于完整尝试的 999.json,如果它们以某种方式排序,那可能是列出的最后一个文件。我以为我的 glob 会处理目录中的每个文件?
这是一个我所说的合并两者的例子。假设我们有两个文件,1.json 和 2.json;
1.json:
{
"header":{
"total":2,"page":1,"date":"2016-08-01T17:29:57Z","page_size":1},
"lenders": [
{"lender_id":"matt","name":"Matt"}
]
}
还有2.json:
{
"header":{
"total":2,"page":2,"date":"2016-08-01T17:30:57Z","page_size":1},
"lenders": [
{"lender_id":"sarah","name":"Sarah"}
]
}
合并结果:
{
"lenders": [
{"lender_id":"matt","name":"Matt"},
{"lender_id:"sarah","name":"Sarah"}
]
}
(我意识到弹出标头是一项附加要求,但不这样做会导致 JSON 无效)
【问题讨论】:
-
我刚刚对其进行了测试,它对我来说效果很好(或者至少是我所期望的)。虽然我不确定你想要什么输出。 “合并”到底是什么意思?那个 gulp 插件会覆盖匹配的键。例如,如果你有两个 JSON 文件,第一个包含
{"value": 1},第二个包含{"value": 2},合并它们的输出将只是{"value": 2}(因为第二个替换了公共密钥value)。因此,如果您的所有 JSON 输入文件完全具有相同的键,您应该期望输出与最后一个文件相同。 -
如果您可以发布
1.json和2.json的示例以及预期的输出,您应该更清楚您要做什么。 -
感谢 MadScone,这解释了很多。所以最后读取的文件是999.json,对输出数据有最终决定权。我所说的合并是创建一个文件,其中包含所有 1.json 以及 2.json 作为单个有效的 JSON 文件。我意识到可能需要进行进一步的编辑,例如弹出无关的标题。但是,如果我合并 2,089 个 json 文件,我的意思是我希望将它们的所有单独数据整理到一个源中。我想更多地处理这个单个文件(将它变成一个 SQL 文件)。感谢您的回复!
-
我根据我认为您可能想要的内容在下面发布了一个答案。我假设你想创建一个 JSON 数组输出。
-
抱歉,我在您编辑示例之前发布了一个解决方案,但现在已修复。
标签: javascript json file-io gruntjs gulp