合并多个 JSON 文件并在生成的对象中包含每个文件的文件名

Merge multiple JSON files and include filename of each file in the resulting object

我有数百个文件被命名为 [guid]。json 它们的结构看起来都类似于:

{
  "Active": true,
  "CaseType": "CaseType",
  "CustomerGroup": ["Core", "Extended"]
}

首先,我需要将一个新的键值对附加到所有具有 "CaseId": "[filename]" 的文件,然后将它们全部合并到一个大数组中,并将其保存为一个新的 json 清单文件。

我想要一个来自 jq 命令的具有以下结构的文件:

[
  {
    "Active": true,
    "CaseType": "CaseType",
    "CustomerGroup": ["Core", "Extended"],
    "CaseId": "43d47f66-5a0a-4b86-88d6-1f1f893098d2"
  },
  {
    "Active": true,
    "CaseType": "CaseType",
    "CustomerGroup": ["Core", "Extended"],
    "CaseId": "e3x47f66-5a0a-4b86-88d6-1f1f893098d2"
  }
]

您正在寻找 input_filename

jq -n '[ inputs | .CaseId = input_filename ]' *.json

您可以使用 reduce 一次添加一个输入对象。使用 input_filename 获取 UTF-8 编码的文件名并使用 CaseId

形成记录
jq -n 'reduce inputs as $d (null; . + [ $d + { CaseId: input_filename } ] )' *.json