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

如何用Java正则正确分割数组格式的JSON对象字符串?

正确拆分JSON数组字符串为单个JSON对象的方案

这种场景我之前踩过坑!你遇到的问题本质是JSON对象内部可能包含逗号、甚至嵌套的花括号,直接用简单的split或者贪婪正则肯定会出错,下面给你几个靠谱的解决思路:

1. 优先使用JSON解析库(最稳妥)

如果你的字符串是标准的JSON数组格式,别用正则折腾了,直接用专业的JSON解析库(比如Jackson、Gson)来处理,这是最可靠的方式,能完美应对各种复杂JSON结构(比如嵌套对象、带特殊字符的字符串)。

举个Gson的示例代码:

import com.google.gson.Gson;
import com.google.gson.JsonArray;

public class JsonSplitExample {
    public static void main(String[] args) {
        String jsonArrayStr = "[{\"id\":1,\"name\":\"Alice\",\"desc\":\"Hello, world\"},{\"id\":2,\"name\":\"Bob\",\"info\":{\"age\":25}}]";
        
        Gson gson = new Gson();
        JsonArray jsonArray = gson.fromJson(jsonArrayStr, JsonArray.class);
        
        // 逐个取出单个JSON对象字符串
        for (int i = 0; i < jsonArray.size(); i++) {
            String singleJson = jsonArray.get(i).toString();
            System.out.println("第" + (i+1) + "个JSON对象:");
            System.out.println(singleJson);
        }
    }
}

这个方法的好处是:不管JSON内部有多少逗号、嵌套结构,解析库都能精准识别每个对象的边界,不会出现误拆分。

2. 用非贪婪正则匹配(适合简单场景)

如果因为某些原因不能用解析库,可以试试非贪婪模式的正则表达式,解决你之前贪婪匹配整个字符串的问题。

之前的\\{.+}是贪婪匹配,会从第一个{一直匹配到最后一个},改成\\{.*?\\}就会变成非贪婪匹配,遇到第一个}就停止,刚好匹配单个JSON对象。

示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexSplitExample {
    public static void main(String[] args) {
        String jsonArrayStr = "[{\"a\":1,\"b\":2},{\"c\":3,\"d\":4},{\"e\":5,\"f\":6}]";
        // 先去掉首尾的[](如果字符串带数组包裹的话)
        String cleanedStr = jsonArrayStr.replaceAll("^\\[|\\]$", "");
        
        Pattern pattern = Pattern.compile("\\{.*?\\}");
        Matcher matcher = pattern.matcher(cleanedStr);
        
        List<String> singleJsonList = new ArrayList<>();
        while (matcher.find()) {
            singleJsonList.add(matcher.group());
        }
        
        // 输出结果
        for (String json : singleJsonList) {
            System.out.println(json);
        }
    }
}

⚠️ 注意:这个方法只适合没有嵌套对象的简单JSON,如果JSON里有{"key": {"inner": 1}}这种嵌套结构,非贪婪正则会在第一个}就停止匹配,导致拆分出不完整的JSON,这种情况还是得用解析库。

3. 修复你之前的split方案(仅限极端简单场景)

你之前用split("},\\{")会丢失首尾括号,其实可以拆分后手动补回去,但这个方法局限性极大,只适合完全没有嵌套、字符串里也不含},的JSON:

public class SplitFixExample {
    public static void main(String[] args) {
        String jsonArrayStr = "[{\"a\":1,\"b\":2},{\"c\":3,\"d\":4},{\"e\":5,\"f\":6}]";
        String cleanedStr = jsonArrayStr.replaceAll("^\\[|\\]$", "");
        
        String[] parts = cleanedStr.split("},\\{");
        for (int i = 0; i < parts.length; i++) {
            if (i == 0) {
                // 第一个元素补结尾的}
                parts[i] = parts[i] + "}";
            } else if (i == parts.length - 1) {
                // 最后一个元素补开头的{
                parts[i] = "{" + parts[i];
            } else {
                // 中间元素补首尾的{}
                parts[i] = "{" + parts[i] + "}";
            }
            System.out.println(parts[i]);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:09:45