【问题标题】:Transform JSON array to object with jq使用 jq 将 JSON 数组转换为对象
【发布时间】:2023-01-24 23:23:13
【问题描述】:

我正在尝试通过特定键将数组转换为对象。它在不使用流的情况下工作正常,但在应用流时不可能。

数据:

[
  {
    "id": "1",
    "userId": "fa51531d"
    }
    ,
    {
    "id": "2",
    "userId": "a167869a"
  }
]

我尝试运行此命令,但它会引发错误。

jq -n --stream 'fromstream(1|truncate_stream(输入)) | INDEX(.id)' test.json > result.json

以上数据应转换为:

{
  "1": {
    "userId": "fa51531d",
    "id": "1"
  },
  "2": {
    "userId": "a167869a",
    "id": "2"
  },
}

我想获得与 jq 'INDEX(.id) 相同的结果,但我需要使用流(因为 JSON 文件很大)。

【问题讨论】:

  • 流真的包含数组开始和结束[ ... ] 还是对象流{ "id": "1", "userId": "fa51531d" } ... 等等?

标签: json jq


【解决方案1】:

要将您的 JSON 数组转换为 JSON 对象,您可以使用它

jq reduce .[] as $item ({}; .[$item.id] = $item)

但是如果你想流式传输 JSON,我没有解决方案

cmiiw

【讨论】:

    【解决方案2】:

    如果您的流真的看起来像您的问题,那么应该这样做:

    jq  '. | INDEX(.id)'
    

    【讨论】:

      猜你喜欢
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多