使用jq实现JSON嵌套数组与上层数组元素提取至同一根层级
要实现你需要的嵌套JSON结构展开,可以直接使用以下jq命令:
jq '{region, user_id} + (.event_array[] | if .event_name == "placed_order" then (.event_attributes.array_within_array[] as $sub_attr | .event_attributes = $sub_attr) else . end)' 输入文件路径.json
命令逻辑说明
- 首先固定提取顶层的
region、user_id两个公共字段,后续所有输出的事件都会携带这两个字段 - 遍历
event_array数组的每一个元素:- 如果当前事件是
placed_order类型,就遍历它内部嵌套的array_within_array子数组,把每个子属性对象赋值给当前事件的event_attributes字段,每遍历一个子元素就生成一条独立的placed_order事件 - 如果是
meal_selection、login这类没有嵌套子数组的事件,直接保留原有结构
- 如果当前事件是
- 最后把公共字段和处理后的事件字段合并,逐个输出同级的JSON对象,输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者SHOAIB AHMED
相关产品推荐
相关产品推荐

