每天学习新知识,每天进步一点点。

JSON数据分组

使用场景:当拿到一组JSON数据时,想要实现提取出此JSON数据中,根据某一个(对象)中的字段进行数据分组解析的情况,则可以使用此案例进行处理。

本案例规则为根据JSON数据中,集合中每一个_widget_1727319205469对象中的username进行分组统计。

json测试数据

{"data":[{"creator":{"name":"张三","username":"user1","status":1,"type":0,"departments":[10]},"updater":{"name":"张三","username":"user1","status":1,"type":0,"departments":[10]},"_widget_1727319205469":{"name":"张三","username":"user1","status":1,"type":0,"departments":[10]}},{"creator":{"name":"李四","username":"user2","status":2,"type":1,"departments":[11]},"updater":{"name":"李四","username":"user2","status":2,"type":1,"departments":[11]},"_widget_1727319205469":{"name":"李四","username":"user2","status":2,"type":1,"departments":[11]}}]}

具体测试代码

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author JMY
 * @version 1.0
 * @date 2024/10/14 11:05
 * @content 细心仔细
 */
public class demo2 {
    public static void main(String[] args) {
        String jsonStr = "{\"data\":[{\"creator\":{\"name\":\"张三\",\"username\":\"user1\",\"status\":1,\"type\":0,\"departments\":[10]},\"updater\":{\"name\":\"张三\",\"username\":\"user1\",\"status\":1,\"type\":0,\"departments\":[10]},\"_widget_1727319205469\":{\"name\":\"张三\",\"username\":\"user1\",\"status\":1,\"type\":0,\"departments\":[10]}},{\"creator\":{\"name\":\"李四\",\"username\":\"user2\",\"status\":2,\"type\":1,\"departments\":[11]},\"updater\":{\"name\":\"李四\",\"username\":\"user2\",\"status\":2,\"type\":1,\"departments\":[11]},\"_widget_1727319205469\":{\"name\":\"李四\",\"username\":\"user2\",\"status\":2,\"type\":1,\"departments\":[11]}}]}";

        JSONObject jsonObject = JSON.parseObject(jsonStr);
        JSONArray dataArray = jsonObject.getJSONArray("data");

        Map<String, List<JSONObject>> groupedData = new HashMap<>();

        for (int i = 0; i < dataArray.size(); i++) {
            JSONObject item = dataArray.getJSONObject(i);
            JSONObject widgetObject = item.getJSONObject("_widget_1727319205469");
            if (widgetObject!= null) {
                String username = widgetObject.getString("username");
                if (!groupedData.containsKey(username)) {
                    groupedData.put(username, new ArrayList<>());
                }
                groupedData.get(username).add(item);
            }
        }

        JSONObject resultJson = new JSONObject();
        JSONArray newDataArray = new JSONArray();
        for (Map.Entry<String, List<JSONObject>> entry : groupedData.entrySet()) {
            JSONArray groupArray = new JSONArray();
            for (JSONObject obj : entry.getValue()) {
                groupArray.add(obj);
            }
            JSONObject groupJson = new JSONObject();
            groupJson.put(entry.getKey(), groupArray);
            newDataArray.add(groupJson);
        }
        resultJson.put("data", newDataArray);

        System.out.println(resultJson.toJSONString());
    }
}

脚本处理返回json

{"data":[{"user1":[{"creator":{"name":"张三","departments":[10],"type":0,"username":"user1","status":1},"_widget_1727319205469":{"name":"张三","departments":[10],"type":0,"username":"user1","status":1},"updater":{"name":"张三","departments":[10],"type":0,"username":"user1","status":1}}]},{"user2":[{"creator":{"name":"李四","departments":[11],"type":1,"username":"user2","status":2},"_widget_1727319205469":{"name":"李四","departments":[11],"type":1,"username":"user2","status":2},"updater":{"name":"李四","departments":[11],"type":1,"username":"user2","status":2}}]}]}

当然,你也可对此案例脚本进行修改,来实现具体的业务需求。