json - 将具有另一个数组元素的 JSON 数组移动到相同的级别
问题描述
我有以下 JSON,它在另一个数组中有一个元素array_within_array 。所以我想使用jq将array_within_array元素和上层数组元素(event_array)拉到根级别。所以这里有3个事件。
- 餐点选择
- 登录
- 下单
事件placed_order在数组中有两个子事件。所以转换后应该有4个事件(1个来自meal_selection,1个来自login,2个来自placed_order)。这些都应该在同一水平上。这是JSON
{
"region": "USA",
"user_id": "123",
"event_array": [{
"event_attributes": {
"date": "2021-08-17",
"category": "lunch",
"location": "office"
},
"event_name": "meal_selection",
"created_at": "2021-08-13 01:28:57"
},
{
"event_name": "login",
"created_at": "2021-08-13 01:29:02"
},
{
"event_attributes": {
"array_within_array": [
{
"date": "2021-08-17",
"category": "lunch",
"location": "office"
},
{
"date": "2021-08-18",
"category": "dinner",
"location": "home"
}
]
},
"event_name": "placed_order",
"created_at": "2021-08-13 01:28:08"
}
]
}
我想转换成下面的
{
"region": "USA",
"user_id": "123",
"event_attributes": {
"date": "2021-08-17",
"category": "lunch",
"location": "office"
},
"event_name": "meal_selection",
"created_at": "2021-08-13 01:28:57"
}
{
"region": "USA",
"user_id": "123",
"event_name": "login",
"created_at": "2021-08-13 01:29:02"
}
{
"region": "USA",
"user_id": "123",
"event_attributes": {
"date": "2021-08-17",
"category": "lunch",
"location": "office"
},
"event_name": "placed_order",
"created_at": "2021-08-13 01:28:08"
}
{
"region": "USA",
"user_id": "123",
"event_attributes": {
"date": "2021-08-18",
"category": "dinner",
"location": "home"
},
"event_name": "placed_order",
"created_at": "2021-08-13 01:28:08"
}
解决方案
这是一个简单的解决方案,通过使用两个步骤使事情变得简单:
{ region, user_id} + (.event_array[] )
| if .event_attributes|has("array_within_array")
then .event_attributes.array_within_array as $a
| .event_attributes = $a[]
else .
end
推荐阅读
- python - GCP cloud functions with "gcloud functions deploy" fails with --source as file rather than directory
- javascript - Plot 2D plane in 3D graph with Plotly.js
- python - rasa 在响应 json 中发送多个消息以获取表单答案 rasa x
- r - 如何使用 conumee R 包制作摘要 CNV 图
- vue.js - 在 VueJS 中从路由器链接突出显示父菜单
- karate - 如何在空手道 dsl 1.0.0 的敏感比较中匹配大小写
- android - 如何为 canvas.drawText 制作背景
- c - 推送期间的分段错误 {lr}
- sql - 选择学生在最少的时间内完成大部分项目
- azure-devops - 我们可以从 workItem 表单中隐藏系统默认字段吗?