如何实现java中的json数组(JSONArray) 根据某个共同字段进行分组

Liu jie 发布于 11/13 16:52
阅读 495
收藏 1

如何用java代码将下面的对象数组:


[
    {"id":"1001","name":"值1","value":"111"},
    {"id":"1001","name":"值1","value":"11111"},
    {"id":"1002","name":"值2","value":"25462"},
    {"id":"1002","name":"值2","value":"23131"},
    {"id":"1002","name":"值2","value":"2315432"},
    {"id":"1003","name":"值3","value":"333333"}
]

根据相同id字段分组,转换成下面这种形式:


[
    {
        "id": "1001",       
        "data": [
            {"id": "1001", "name": "值1", "value": "111"},
            { "id": "1001", "name": "值1", "value": "11111"}
        ]
    },
    {
        "id": "1002",        
        "data": [
            { "id": "1002",  "name": "值2", "value": "25462" },
            { "id": "1002", "name": "值2", "value": "23131"},
            {"id": "1002", "name": "值2","value": "2315432" }
        ]
    },
    {
        "id": "1003",       
        "data": [
            {"id": "1003", "name": "值3", "value": "333333" }
        ]
    }
]

 

加载中
0
找不着北的墙
找不着北的墙

java8用流就能设置成map吧 提取出来不是这种格式  还需要重新封装一下

0
yang1130
yang1130

最笨的方式循环拆解。

0
L
Liu jie

楼上的可否提供一段java代码啊?我不知所措了。

0
找不着北的墙
找不着北的墙
String json="[\n" +
        "    {\"id\":\"1001\",\"name\":\"值1\",\"value\":\"111\"},\n" +
        "    {\"id\":\"1001\",\"name\":\"值1\",\"value\":\"11111\"},\n" +
        "    {\"id\":\"1002\",\"name\":\"值2\",\"value\":\"25462\"},\n" +
        "    {\"id\":\"1002\",\"name\":\"值2\",\"value\":\"23131\"},\n" +
        "    {\"id\":\"1002\",\"name\":\"值2\",\"value\":\"2315432\"},\n" +
        "    {\"id\":\"1003\",\"name\":\"值3\",\"value\":\"333333\"}\n" +
        "]";

List<MapTest> list= new Gson().fromJson(json,new TypeToken<List<MapTest>>(){}.getType());
Map<String, List<MapTest>> collect = list.stream().collect(Collectors.groupingBy(MapTest::getId));
String s = new Gson().toJson(collect);
System.out.println("s = " + s);
0
找不着北的墙
找不着北的墙

em...  后面再封装一下就好了,实现你自己的格式

0
k
ksopenapi

引用来自“找不着北的墙”的评论

em...  后面再封装一下就好了,实现你自己的格式

List<Result> result = collect.entrySet().stream().map(one->new Result(one.getKey(),one.getValue())).collect(Collectors.toList());

Result是问题里最终的格式。

0
L
Liu jie

谢谢楼上各位了。我调试一下看看结果。

0
L
Liu jie

引用来自“ksopenapi”的评论

引用来自“找不着北的墙”的评论

em...  后面再封装一下就好了,实现你自己的格式

List<Result> result = collect.entrySet().stream().map(one->new Result(one.getKey(),one.getValue())).collect(Collectors.toList());

Result是问题里最终的格式。

结果不对啊。这个Result还需要包装一下吗?有点看不懂,可否在详细解释一下呢?

0
我的鼠
我的鼠
list套list应该没问题
0
k
ksopenapi

引用来自“Liu jie”的评论

引用来自“ksopenapi”的评论

引用来自“找不着北的墙”的评论

em...  后面再封装一下就好了,实现你自己的格式

List<Result> result = collect.entrySet().stream().map(one->new Result(one.getKey(),one.getValue())).collect(Collectors.toList());

Result是问题里最终的格式。

结果不对啊。这个Result还需要包装一下吗?有点看不懂,可否在详细解释一下呢?

class Result{

    String id;

    List data;

}

返回顶部
顶部
天津时时彩