json 合并两个具有公共值的数组

ljo96ir5  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(145)

我有一个JSON对象,如下所示:

{
   "data":{
      "list1":[
         {
            "id":"1",
            "description":"abc..",
            "title":"abc"
         },
         {
            "id":"2",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"3",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"4",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"5",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"6",
            "description":"hello..",
            "title":"hello"
         }
      ],
      "list2":[
         {
            "info":"this is list2",
            "idList":[
               "1",
               "3"
            ]
         },
         {
            "info":"this is list2",
            "idList":[
               "2",
               "4"
            ]
         }
      ]
   }
}

在转换后的JSON中,只要id匹配,我希望list1的所有内容都在list2idList中。

{
   "res":{
      "data":[
         {
            "info":"this is list2",
            "idList":[
               {
                  "id":"1",
                  "description":"abc..",
                  "title":"abc"
               },
               {
                  "id":"3",
                  "description":"hello..",
                  "title":"hello"
               }
            ]
         },
         {
            "info":"this is list2",
            "idList":[
               {
                  "id":"2",
                  "description":"hello..",
                  "title":"hello"
               },
               {
                  "id":"4",
                  "description":"hello..",
                  "title":"hello"
               }
            ]
         }
      ]
   }
}

如何使用Jolt Spec来实现这种转换?

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "list1": {
          "*": {
            "id": {
              "@(3,list2[&].idList)": {
                "@(4,list2[&].idList)": "res.data[&3].idList"
              }
            }
          }
        },
        "list2": {
          "*": {
            "info": "res.data[&1].info"
          }
        }
      }
    }
  }
 ]

我尝试使用此规范来匹配这两个列表,但是没有得到list1规范的任何内容。得到的结果只是信息部分:

{
  "res" : {
    "data" : [ {
      "info" : "this is list2"
    }, {
      "info" : "this is list2"
    } ]
  }
}
5n0oy7gb

5n0oy7gb1#

可以使用此等级库:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "list1": {
          "*": {
            "*": "&3.&2.@(1,id).&"
          }
        },
        "*": "&1.&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "list2": {
          "*": {
            "*": "res.&3[&1].&",
            "idList": {
              "*": {
                "*": {
                  "@(5,list1.&)": "res.&6.[&4].&3"
                }
              }
            }
          }
        }
      }
    }
  }
]

相关问题