如何在Java中使用正则表达式从字符串提取JSON数组值
解决方案
方案一:分阶段正则提取
之前的正则仅能获取最后一个值,是因为Java正则引擎中,重复的捕获组只会保留最后一次匹配的结果。可以分两步规避这个问题:
- 先匹配出
"values"对应数组的内容(即[]包裹的部分) - 在这个子串内逐个提取所有符合格式的元素
代码实现
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
相关产品推荐
相关产品推荐

