我有一个文件夹树,存储从数据集转换的各种 .json 文件。类似的东西
/(top folder)
|-- folder1/
| |- file1.json {"a":1,"b":[1,2]}
| |- file2.json {"a":12,"c":[]}
|-- folder2/
|- file1.json {"ta":1,"tb":[1,2]}
|- file2.json {"ta":12,"tc":1}
|- folder21/
|- file3.json {"test":true}
我希望将此文件夹合并为
{
"folder1": {
"file1.json": {"a":1,"b":[1,2]},
"file2.json": {"a":12,"c":[]}
},
"folder2": {
"file1.json": {"ta":1,"tb":[1,2]},
"file2.json": {"ta":12,"tc":1},
"folder21" : {
"file3.json": {"test":true}
}
}
}
我知道这可以通过编写显式循环来使用 python/perl 实现:1)解析 json 文件,2)使用文件/文件夹名称作为键将解析后的数据与本机数据结构/对象合并,3)保存合并的数据数据结构到单个 JSON 文件中。我已经为 Octave/MATLAB 实现了一个,它可以工作,但有点慢。 我想知道是否可以使用 jq 有效地做到这一点。
我看到可以使用
reduce
表达式合并同一文件夹中的 json 文件,请参阅
https://stackoverflow.com/a/59769797/4271392我想知道 jq 是否允许扫描和迭代子文件夹并合并每个文件夹。
如果可能的话,如果有人可以向我指出相关示例或文档,我将不胜感激。
bash
,您可以尝试这个调用 jq 的脚本:
#!/bin/bash
shopt -s globstar
jq -n 'reduce inputs as $s ({}; setpath(input_filename|split("/");$s) )' */**/*.json