java拼接JSON数据返回给前端

        "mid": 0,
        "rolename": "超级管理员",
        "menuname": "one"
    },
    {
        "mid": 0,
        "rolename": "超级管理员",
        "menuname": "two"
    },
    {
        "mid": 0,
        "rolename": "超级管理员",
        "menuname": "three"
    },
    {
        "mid": 0,
        "rolename": "管理员",
        "menuname": "one"
    },
    {
        "mid": 0,
        "rolename": "管理员",
        "menuname": "two"
    },
    {
        "mid": 0,
        "rolename": "普通用户",
        "menuname": "one"
    }
],

拼接后

        "mid": 0,
        "rolename": "超级管理员",
        "menuname": "one,two,three"
    },
  
    {
        "mid": 0,
        "rolename": "管理员",
        "menuname": "one,two"
    },
    {
    {
        "mid": 0,
        "rolename": "普通用户",
        "menuname": "one"
    }
],

返回给前端再在前端拼接


    const arr = [
      { mid: 0, rolename: "超级管理员", menuname: "one" },
      {
        mid: 0,
        rolename: "超级管理员",
        menuname: "two",
      },
      {
        mid: 0,
        rolename: "超级管理员",
        menuname: "three",
      },
      {
        mid: 0,
        rolename: "管理员",
        menuname: "one",
      },
      {
        mid: 0,
        rolename: "管理员",
        menuname: "two",
      },
      {
        mid: 0,
        rolename: "普通用户",
        menuname: "one",
      },
    ];
    const newArr = [];
    arr.forEach((cur) => {
      const index = newArr.findIndex((newA) => newA.rolename === cur.rolename);
      index === -1
        ? newArr.push(cur)
        : (newArr[index].menuname = newArr[index].menuname.concat(
            "," + cur.menuname
          ));
    });
    console.log(newArr);

img


回答不易,有帮助请采纳

思路:使用 Java 8 Stream 将列表转换为 Map,其中 Map 的 key 为 mid+rolename,value 为列表项,如果遇到相同的key,取新的项,并将新项中的 menuname 设置为旧项中的 menuname + 新项中的 menuname,Map 中的值就是想要的结果。

代码实现:

public class App {

    @lombok.Data
    private static class Data {
        private Integer mid;
        private String roleName;
        private String menuname;
    }

    public static void main(String[] args) {
        // 输入:[{"mid":0,"rolename":"管理员","menuname":"one"},{"mid":0,"rolename":"管理员","menuname":"two"}]
        String arr = "[{\"mid\":0,\"rolename\":\"管理员\",\"menuname\":\"one\"},{\"mid\":0,\"rolename\":\"管理员\",\"menuname\":\"two\"}]";
        Collection<Data> newList = JSONArray.parseArray(arr, Data.class).stream()
                .collect(Collectors.toMap(item -> item.getMid() + item.getRoleName(), item -> item, (oldData, newData) -> {
                    newData.setMenuname(oldData.getMenuname() + "," + newData.getMenuname());
                    return newData;
                })).values();
        // 输出:[{"menuname":"one,two","mid":0,"roleName":"管理员"}]
        System.out.println(JSONArray.toJSONString(newList));
    }
}

可以使用fastjson,有对应的对象及数组等,直接返回即可。

这是一个标准的List<T>格式。