json jq 向每个 object/array 添加相同的元素

json jq add same element to each object/array

我有 json 结构如下的文件:

[
  {
    "uid": 11111,
    "something": {
        (...)
    }
  },
  {
    "uid": 22222,
    "something": {
        (...)
    }
  }
]

我将一次读取所有文件 (cat *),我想知道哪个部分来自哪个文件,所以我需要以某种方式对其进行分组。

所以,我的想法是将每个文件的内容移动到具有自己成员的更高(父)对象。

[
  {
  "var1": "val1"
  "var2": "val2"
    {
      "uid": 11111,
      "something": {
            (...)
      }
    },
    {
      "uid": 22222,
      "something": {
            (...)
      }
    }
  }

如何使用 jq 做到这一点?

#!/bin/bash

# For simplicity, assume each file in FILELIST contains a single JSON entity.
# Then instead of using cat FILELIST, use mycat FILELIST, e.g. mycat *.json

function mycat {
  for file
  do
    jq --arg file "$file" '{"file": $file, "contents": .}' "$file"
  done
}

如果您有足够新的 jq 版本(例如 jq 1.5),那么另一种选择是:

jq '{file: input_filename, contents: .}' FILELIST