You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于公共数字分组JSONArray元素,创建分组数组遇实现问题

搞定JSONArray按公共数字分组的问题

嘿,我猜你应该是在用Java的org.json.JSONArray处理数据吧?从你描述的情况来看,大概率是循环里踩了「复用同一个数组对象」或者「分组匹配逻辑出错」的坑,导致没法生成独立的分组数组。下面给你一个清晰的解决思路和可运行的代码示例:

核心思路

用一个Map来做分组映射:键是你说的「公共数字」(比如1对应ONES,2对应TWO),值是对应分组的独立JSONArray。遍历原数组时,把每个元素分配到对应键的数组里——如果该分组还不存在,就新建一个JSONArray,这样每个分组都是完全独立的。

完整代码示例

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

public class JSONGroupingFix {
    public static void main(String[] args) {
        // 模拟你的原始目标数组
        JSONArray originalArray = new JSONArray();
        
        // 加入6个ONES元素(假设元素是带type字段的JSONObject,你可以根据实际结构调整)
        for (int i = 0; i < 6; i++) {
            originalArray.put(new JSONObject().put("type", "ONES"));
        }
        // 加入1个TWO和1个THREE
        originalArray.put(new JSONObject().put("type", "TWO"));
        originalArray.put(new JSONObject().put("type", "THREE"));

        // 1. 创建分组映射表,确保每个分组是独立数组
        Map<Integer, JSONArray> groupedArrays = new HashMap<>();

        // 2. 遍历原数组完成分组
        for (int idx = 0; idx < originalArray.length(); idx++) {
            JSONObject currentElem = originalArray.getJSONObject(idx);
            String elemType = currentElem.getString("type");
            Integer groupNum = null;

            // 匹配元素对应的公共数字
            switch (elemType) {
                case "ONES":
                    groupNum = 1;
                    break;
                case "TWO":
                    groupNum = 2;
                    break;
                case "THREE":
                    groupNum = 3;
                    break;
                default:
                    // 处理未知类型,比如跳过或者放到默认分组
                    continue;
            }

            // 分组不存在就新建,避免复用同一个数组
            if (!groupedArrays.containsKey(groupNum)) {
                groupedArrays.put(groupNum, new JSONArray());
            }
            // 将元素加入对应分组
            groupedArrays.get(groupNum).put(currentElem);
        }

        // 3. 提取各个独立分组数组
        JSONArray onesGroup = groupedArrays.get(1);
        JSONArray twoGroup = groupedArrays.get(2);
        JSONArray threeGroup = groupedArrays.get(3);

        // 验证结果
        System.out.println("ONES分组元素数量:" + onesGroup.length()); // 输出6
        System.out.println("TWO分组元素数量:" + twoGroup.length()); // 输出1
        System.out.println("THREE分组元素数量:" + threeGroup.length()); // 输出1
    }
}

你之前可能踩的坑

  • 复用同一个数组对象:比如你在循环里只创建了一个JSONArray,每次分组都往里面塞元素,最后所有分组都指向同一个数组,数据全混在一起。解决办法就是每个分组都要单独新建JSONArray。
  • 分组匹配逻辑错误:比如判断元素类型时的条件写错,导致元素没分到正确的组里。用switch或者明确的if-else可以避免这个问题。
  • 空指针风险:如果某个分组没有元素,直接调用get会返回null,所以最好先判断containsKey再获取。

如果你的元素结构不是带type字段的JSONObject(比如是纯字符串),只需要调整「匹配公共数字」的逻辑就行,核心的分组思路是通用的。

内容的提问来源于stack exchange,提问作者Karthikeyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:32:15