如何使用JQ将嵌套数组结构的JSON扁平化为单层列表结构
JQ转换实现方案
可直接运行的转换命令
# 写法1:仅提取id和number字段,完全匹配目标输出格式 jq '{items: [.clients[] | {id, number: .accounts[].number}]}' 输入文件路径 # 写法2:通用扩展写法,可完整保留account下所有字段,适合account字段较多的场景 jq '{items: [.clients[] | {id} + .accounts[]]}' 输入文件路径
用到的JQ核心功能
- 数组展开操作符
[]:通过.clients[]遍历外层clients数组的所有client元素,再通过.accounts[]展开单个client对应的accounts数组,实现一对多拆分,每个account都会单独生成一条结果对象 - 管道符
|:用于传递处理上下文,将遍历得到的单个client对象传递到后续的对象构造逻辑中 - 对象构造与合并语法:
{id}是JQ字段简写语法,等价于{"id": .id},可直接从当前上下文提取对应字段生成新对象;+用于合并两个JSON对象,把id字段和account的所有字段合并为一个新对象 - 数组包装语法
[]:将所有拆分生成的对象统一包装为一个数组,作为顶级items字段的值
内容的提问来源于stack exchange,提问作者user3569530
相关产品推荐
相关产品推荐

