使用 Jq 展平 JSON,并在输出中使用数组索引

Posted

技术标签:

【中文标题】使用 Jq 展平 JSON,并在输出中使用数组索引【英文标题】:Flatten JSON with Jq with array index in output 【发布时间】:2021-01-28 06:46:36 【问题描述】:

我正在尝试基于嵌套的 Json 创建单个 json 输出:


    "Id" : "1",
    "items" : [
        "item_name" : "shirt","value" : 10,
        "item_name" : "dress","value" : 20,
        "item_name" : "ice cream","value" : 30
    ] 

我的预期输出是:

[
  
    "id": "1",
    "item_name": "shirt",
    "value": 10,
    "index_position": 0
  ,
  
    "id": "1",
    "item_name": "dress",
    "value": 20,
    "index_position": 1
  ,
  
    "id": "1",
    "item_name": "ice cream",
    "value": 30,
    "index_position": 2
  
]

我能够获取的唯一输出是在这个 sn-p 上:

https://jqplay.org/s/G6mYAI47LE

迭代内部数组并同时获取外部对象数据的最佳方法是什么?

【问题讨论】:

【参考方案1】:

Q.E.D.如下:

.Id as $Id
| .items
| [ range(0; length) as $index_position
   | $Id + .[$index_position] + $index_position ]

这里简洁(或至少干燥)的关键是 jq 表达式 $x 扩展为 "x": $x

【讨论】:

以上是关于使用 Jq 展平 JSON,并在输出中使用数组索引的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQ 展平分层 JSON 数组

通过按键过滤数组,使用 jq 展平 JSON 文档

使用 jq 保留键名展平 JSON

如何使用 jq 展平复杂的 json 结构?

使用 jq 展平嵌套的 JSON

使用 JQ 展平嵌套的 Json 对象