使用 jolt 从嵌套 JSON 创建更简单的 JSON 对象数组
Create array of simpler JSON objects from a nested JSON using jolt
我的输入JSON就像
{
"common": {
"name": "abc"
},
"details": {
"id": 4,
"node": [
{
"name": "node1",
"array2": []
},
{
"name": "node2",
"array2": [
{
"name": "node2_a2_1"
}
]
},
{
"name": "node3",
"array2": [
{
"name": "node3_a2_1"
},
{
"name": "node3_a2_2"
},
{
"name": "node3_a2_3"
}
]
}
]
}
}
我想要的是 array2 中的每个叶节点(例如 {"name": "node3_a2_1"}
)我将遍历根并添加所有公共项目并创建一个 JSON 对象数组,没有任何嵌套对象。所以,我想要的输出是
[
{
"common_name": "abc",
"id": 4,
"node_name": "node2",
"name": "node2_a2_1"
},
{
"common_name": "abc",
"id": 4,
"node_name": "node3",
"name": "node3_a2_1"
},
{
"common_name": "abc",
"id": 4,
"node_name": "node3",
"name": "node3_a2_2"
},
{
"common_name": "abc",
"id": 4,
"node_name": "node3",
"name": "node3_a2_3"
}
]
你能建议我该怎么做吗?
您可以遍历 array2
,同时从每个元素在 JSON 值中的原始位置选取值。
例如;使用@(4,id)
遍历四次}
获取id
的值,并使用@(3,name)[&1]
作为
等各个属性的公共区分标识
[
{
"operation": "shift",
"spec": {
"details": {
"node": {
"*": {
"array2": {
"*": {
"@(5,common.name)": "@(3,name)[&1].common_name",
"@(4,id)": "@(3,name)[&1].id",
"@(2,name)": "@(3,name)[&1].node_name",
"name": "@(3,name)[&1].&"
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": ""
}
}
}
]
我的输入JSON就像
{
"common": {
"name": "abc"
},
"details": {
"id": 4,
"node": [
{
"name": "node1",
"array2": []
},
{
"name": "node2",
"array2": [
{
"name": "node2_a2_1"
}
]
},
{
"name": "node3",
"array2": [
{
"name": "node3_a2_1"
},
{
"name": "node3_a2_2"
},
{
"name": "node3_a2_3"
}
]
}
]
}
}
我想要的是 array2 中的每个叶节点(例如 {"name": "node3_a2_1"}
)我将遍历根并添加所有公共项目并创建一个 JSON 对象数组,没有任何嵌套对象。所以,我想要的输出是
[
{
"common_name": "abc",
"id": 4,
"node_name": "node2",
"name": "node2_a2_1"
},
{
"common_name": "abc",
"id": 4,
"node_name": "node3",
"name": "node3_a2_1"
},
{
"common_name": "abc",
"id": 4,
"node_name": "node3",
"name": "node3_a2_2"
},
{
"common_name": "abc",
"id": 4,
"node_name": "node3",
"name": "node3_a2_3"
}
]
你能建议我该怎么做吗?
您可以遍历 array2
,同时从每个元素在 JSON 值中的原始位置选取值。
例如;使用@(4,id)
遍历四次}
获取id
的值,并使用@(3,name)[&1]
作为
[
{
"operation": "shift",
"spec": {
"details": {
"node": {
"*": {
"array2": {
"*": {
"@(5,common.name)": "@(3,name)[&1].common_name",
"@(4,id)": "@(3,name)[&1].id",
"@(2,name)": "@(3,name)[&1].node_name",
"name": "@(3,name)[&1].&"
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": ""
}
}
}
]