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

如何在Java中使用正则表达式从字符串提取JSON数组值

解决方案

方案一:分阶段正则提取

之前的正则仅能获取最后一个值,是因为Java正则引擎中,重复的捕获组只会保留最后一次匹配的结果。可以分两步规避这个问题:

  1. 先匹配出"values"对应数组的内容(即[]包裹的部分)
  2. 在这个子串内逐个提取所有符合格式的元素

代码实现

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

public class ExtractValues {
    public static void main(String[] args) {
        String source = source();
        // 第一步:匹配values数组的内容部分
        String outerPattern = "\"values\"\\s*:\\s*\\[(.*?)]";
        Matcher outerMatcher = Pattern.compile(outerPattern, Pattern.DOTALL).matcher(source);
        
        if (outerMatcher.find()) {
            String arrayContent = outerMatcher.group(1);
            // 第二步:提取数组中的所有元素
            String innerPattern = "\"(\\w+)\"";
            Matcher innerMatcher = Pattern.compile(innerPattern).matcher(arrayContent);
            
            while (innerMatcher.find()) {
                System.out.println("提取到的值:" + innerMatcher.group(1));
            }
        }
    }

    private static String source() {
        String s = "{\"values\": [\n"
                + "        \"abc123\",        \"def456\",      "
                + "          \"xyz789\" ]\n"
                + "    }";
        return s;
    }
}

这里用Pattern.DOTALL让.可以匹配换行符,确保捕获多行的数组内容;同时用非贪婪模式.*?避免误匹配到其他无关的]符号。

方案二:使用JSON解析库(推荐)

如果允许引入第三方库,这是更可靠的方案,能避免正则处理JSON时的各种边缘问题(比如元素包含特殊字符、格式微调等)。以下提供两种常用库的实现:

基于Jackson库的实现

Maven依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

代码示例

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class ExtractValuesWithJackson {
    public static void main(String[] args) throws IOException {
        String source = source();
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode rootNode = objectMapper.readTree(source);
        
        JsonNode valuesNode = rootNode.get("values");
        if (valuesNode != null && valuesNode.isArray()) {
            for (JsonNode node : valuesNode) {
                System.out.println("提取到的值:" + node.asText());
            }
        }
    }

    private static String source() {
        String s = "{\"values\": [\n"
                + "        \"abc123\",        \"def456\",      "
                + "          \"xyz789\" ]\n"
                + "    }";
        return s;
    }
}

基于Gson库的实现

Maven依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

代码示例

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class ExtractValuesWithGson {
    public static void main(String[] args) {
        String source = source();
        JsonObject rootObject = JsonParser.parseString(source).getAsJsonObject();
        
        JsonArray valuesArray = rootObject.getAsJsonArray("values");
        for (int i = 0; i < valuesArray.size(); i++) {
            System.out.println("提取到的值:" + valuesArray.get(i).getAsString());
        }
    }

    private static String source() {
        String s = "{\"values\": [\n"
                + "        \"abc123\",        \"def456\",      "
                + "          \"xyz789\" ]\n"
                + "    }";
        return s;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:20:28