【问题标题】:Merge multiple JSON files and include filename of each file in the resulting object合并多个 JSON 文件并在结果对象中包含每个文件的文件名
【发布时间】:2020-10-19 08:56:21
【问题描述】:

我有数百个文件被命名为 [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"
  }
]

【问题讨论】:

  • 但是您的预期输出显示 CaseId43d47f66-5a0a-4b86-88d6-1f1f893098d2 相同?他们不应该是独一无二的
  • 哦.. 错字谢谢指出 ????

标签: json merge filenames jq


【解决方案1】:

您正在寻找input_filename

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

【讨论】:

  • 还有一个问题。是否可以避免将“.json”作为 CaseId 值的一部分?
  • 当然。使用(input_filename | rtrimstr(".json"))
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2013-01-23
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多