java—使用嵌套结构搜索和验证json对象

zlwx9yxi  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(314)

我有一个请求和响应json对象,如下所示

{
   "request":{
      "name":"Ryan",
      "title":"TEMP",
      "workGroups":[
         {
            "home":[
               {
                  "groupName":"Group 1",
                  "groupValue":"5"
               },
               {
                  "groupName":"Group 3",
                  "groupValue":"6"
               }
            ]
         }
      ]
   },
   "response":{
      "name":"Ryan",
      "title":"TEMP",
      "workGroups":[
         {
            "home":[
               {
                  "groupName":"Group 3",
                  "groupValue":"6"
               },
               {
                  "groupName":"Group 1",
                  "groupValue":"5"
               }
            ]
         }
      ]
   }
}

我试图将请求中“workgroups”中“home”字段中的嵌套值与响应中的相同字段进行比较,然后处理验证之后,考虑到home字段中的值在请求和响应之间的顺序可能不同,如何比较其中的值,有没有办法用最小的循环来实现呢?

ecfsfe2w

ecfsfe2w1#

假设两个对象都已反序列化,则可以轻松展平包含最内部对象的两个列表 home 像这样的物体:

List<HomeExample> responseHomes = response
    .getWorkGroups()
    .stream()
    .map(WorkgroupExample::getHome)
    .flatMap(List::stream)
    .collect(Collectors.toList());

List<HomeExample> requestHomes = payload
    .getWorkGroups()
    .stream()
    .map(WorkgroupExample::getHome)
    .flatMap(List::stream)
    .collect(Collectors.toList());

这样,您将得到两个不同的列表,其中一个包含 home 的条目 request 对象和包含 home 的条目 response 对象。
有了它,您就可以忽略顺序比较这两个列表,或者手动比较,或者使用 CollectionUtils#isEqualCollection .

相关问题