如何使用jq解析嵌套JSON并提取字段生成新键调整结构
你遇到的Cannot index array with string "epics"报错,核心原因是没有先遍历最外层的JSON数组,直接对数组整体操作嵌套字段导致的。
可直接使用的jq命令
jq 'map(. + { assigneeId: .assignee.id, assigneeName: "\(.assignee.firstName) \(.assignee.lastName)", epicsID: .epics[0].id } | del(.assignee, .epics))' 你的输入文件.json
命令说明
map():用来遍历最外层数组内的每一个对象,所有结构调整操作都会针对单个对象执行,避免数组索引错误. + {新字段集合}:在保留原有普通字段(如id、location)的基础上,新增三个自定义字段:assigneeId:直接提取assignee嵌套对象的id值assigneeName:通过jq字符串插值语法拼接firstName和lastName,中间保留空格epicsID:提取epics数组第一个元素的id值。如果你的epics数组可能存在多个元素,需要提取所有id组成数组,可以将这部分修改为epicsID: [.epics[].id]
del(.assignee, .epics):删除原始的两个嵌套字段
如果需要将处理后的结果直接保存为新文件,可以追加重定向输出:
jq 'map(. + {assigneeId: .assignee.id, assigneeName: "\(.assignee.firstName) \(.assignee.lastName)", epicsID: .epics[0].id} | del(.assignee, .epics))' input.json > output.json
注:你给出的预期输出中
assingeeName属于拼写错误,上述命令生成的是正确拼写assigneeName,如果确实需要该拼写的键名,直接修改命令里的键名即可。
内容的提问来源于stack exchange,提问作者MeanOtter
相关产品推荐
相关产品推荐

