问题描述
我正在尝试根据 id、name 和 type 对 json 元素进行分组,如下所示:
输入:
[
{
"itemid": "1","itemName": "coco","itemType": "brg","subitemId": "444","subitemName": "INDICATIVE"
},{
"itemid": "1","subitemId": "333","subitemName": "BRGS"
},{
"itemid": "2","itemName": "limk","itemType": "cmds","subitemId": "456","subitemName": "NMPS"
}
]
预期输出:
[
{
"itemid": "1","subitems": [
{
"subitemId": "444","subitemName": "INDICATIVE"
},{
"subitemId": "333","subitemName": "BRGS"
}
]
},"subitems": [
{
"subitemId": "456","subitemName": "NMPS"
}
]
}
]
我尝试了以下规范,但没有给出预期的输出:
[
{
"operation": "shift","spec": {
"*": {
"subitemId": "subitems[&1].subitemId","subitemName": "subitems[&1].subitemName","*": "&"
}
}
}
]
你能帮我吗。
解决方法
这个规范应该适合你
[
{
"operation": "modify-default-beta","spec": {
"*": {
"comp_id": "=concat(@(1,itemid),'_',@(1,itemName),itemType))"
}
}
},{
"operation": "shift","spec": {
"*": {
"*": "@(1,comp_id).&[]"
}
}
},"spec": {
"*": {
"*": "[#2].&","comp_id": null
}
}
},{
"operation": "modify-overwrite-beta","spec": {
"*": {
"itemid": "=firstElement(@(1,itemid))","itemName": "=firstElement(@(1,itemName))","itemType": "=firstElement(@(1,"spec": {
"*": {
"*": "[&1].&","subitemId": {
"*": "[&2].subitems[&].subitemId"
},"subitemName": {
"*": "[&2].subitems[&].subitemName"
}
}
}
}
]
使用 https://jolt-demo.appspot.com 测试
尝试通过操作来检查它。