jq 将对象键值映射到包含两者的对象数组

jq map object key value to array of objects containing both

我想在对象本身中放置一个对象父键,并将每个键值对转换为一个数组

鉴于:

{
  "field1": {
    "key1": 11,
    "key2": 10
  },
  "field2": {
    "key1": 11,
    "key2": 10
  }
}

期望的输出

[
   {"name": "field1", "key1": 11, "key2": 10},
   {"name": "field2", "key1": 11, "key2": 10}
]

我知道 jq keys 会给我 ["field1", "field2"]jq '[.[]]' 会给我

[
  { "key1": 11, "key2": 10 },
  { "key1": 11, "key2": 10 }
]

我想不出结合它们的方法,我该怎么办?

为每个键生成一个 {"name": <key>} 形式的对象,并将其与键的值合并。

to_entries | map({name: .key} + .value)

或:

[keys_unsorted[] as $k | {name: $k} + .[$k]]

类似下面的内容。使用 keys[] 获取 JSON 中的键列表,并通过在每个对象上索引键添加新字段 name

jq '[ keys[] as $k | { name: $k } + .[$k] ]'

如果要保持键的顺序,请使用keys_unsorted[]