如何将文件夹组织的 .json 文件合并到单个 JSON 文件中,并以文件夹/文件名作为键

问题描述 投票:0回答:1

我有一个文件夹树,存储从数据集转换的各种 .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 是否允许扫描和迭代子文件夹并合并每个文件夹。

如果可能的话,如果有人可以向我指出相关示例或文档,我将不胜感激。

json shell command-line-interface jq
1个回答
0
投票
bash

,您可以尝试这个调用 jq 的脚本:

#!/bin/bash

shopt -s globstar
jq -n 'reduce inputs as $s ({}; setpath(input_filename|split("/");$s) )' */**/*.json

© www.soinside.com 2019 - 2024. All rights reserved.