首页 > 解决方案 > jq 将命名数组转换为列表

问题描述

如何获取命名数组的名称,将它们作为元素插入其中,然后删除名称?

{
  "l1": {
    "v1": {
      "a": [1],
      "b": [2]
    },
    "v2": {
      "a": [3],
      "b": [4]
    }
  },
  "l2": {
    "v3": {
      "a": [5],
      "b": [6]
    },
    "v4": {
      "a": [7],
      "b": [8]
    }
  }
}

进入

[
  {
    "id": ["l1"],
    "v1": {
      "a": [1],
      "b": [2]
    },
    "v2": {
      "a": [3],
      "b": [4]
    }
  },
  {
    "id": ["l2"],
    "v3": {
      "a": [5],
      "b": [6]
    },
    "v4": {
      "a": [7],
      "b": [8]
    }
  }
]

名称("l1", "l2")不是先验已知的,其他内容也不是;我所知道的是,我想采用顶级名称并将它们作为"id"-named 对象插入。

我相信这与使用 jq 将名称/值对数组转换为具有命名键的对象接近。

jq 'to_entries'

开始,但同时嵌入"key"and "value",而我真的只想添加 (prepend) "key",甚至更好地控制文字“键”到 (say) "id"

标签: jsonjq

解决方案


你在正确的轨道上思考to_entries

[to_entries[] | {id: .key} + .value]

努夫说。


推荐阅读