
本文介绍了在 Java 中从包含 JSON 数组的字符串中提取特定值的三种方法。首先,推荐使用 Jackson 库进行 JSON 解析,展示了如何通过 POJO 类或 JsonNode 来提取数据。其次,提供了一种在必须手动解析的情况下,通过正则表达式捕获 JSON 数组并进行分割的方法,虽然相对复杂,但在特定场景下仍然适用。
当处理 JSON 数据时,强烈推荐使用专门的 JSON 解析库,例如 Jackson 或 Gson。这些库提供了方便的 API,可以轻松地将 JSON 字符串转换为 Java 对象,避免了手动解析的复杂性和潜在错误。
1. 使用 POJO 类
如果 JSON 结构是固定的,可以定义一个对应的 POJO(Plain Old Java Object)类,使用 Jackson 库将其自动反序列化。
立即学习“Java免费学习笔记(深入)”;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import java.io.IOException;
import java.util.List;
public class MyPojo {
private List<String> values;
public List<String> getValues() {
return values;
}
public void setValues(List<String> values) {
this.values = values;
}
public static void main(String[] args) throws IOException {
String jsonStr = "{"values": ["abc123", "def456", "xyz789"]}";
ObjectMapper mapper = new JsonMapper();
MyPojo pojo = mapper.readValue(jsonStr, MyPojo.class);
System.out.println(pojo.getValues()); // Output: [abc123, def456, xyz789]
}
}注意事项:
2. 使用 JsonNode
如果 JSON 结构是动态的,或者不想定义 POJO 类,可以使用 JsonNode 来解析 JSON。
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import java.io.IOException;
import java.util.List;
public class JsonNodeExample {
public static void main(String[] args) throws IOException {
String jsonStr = "{"values": ["abc123", "def456", "xyz789"]}";
ObjectMapper mapper = new JsonMapper();
JsonNode node = mapper.readTree(jsonStr).get("values");
List<String> values = mapper.readerFor(new TypeReference<List<String>>() {}).readValue(node);
values.forEach(System.out::println);
// Output:
// abc123
// def456
// xyz789
}
}代码解释:
虽然不推荐,但在某些情况下,可能需要手动解析 JSON。以下提供一种使用正则表达式的方法,仅作为参考。
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class RegexExample {
public static void main(String[] args) {
String jsonStr = "{"values": ["abc123", "def456", "xyz789"]}";
Pattern pattern = Pattern.compile(""values"\s*:\s*\[(.+?)\]");
Matcher matcher = pattern.matcher(jsonStr);
if (matcher.find()) {
String arrayContent = matcher.group(1);
List<String> values = Arrays.stream(arrayContent.split(","))
.map(s -> s.replaceAll(""", "").trim())
.collect(Collectors.toList());
values.forEach(System.out::println);
// Output:
// abc123
// def456
// xyz789
}
}
}代码解释:
注意事项:
总结:
推荐使用 Jackson 或 Gson 等 JSON 解析库来处理 JSON 数据。如果必须手动解析 JSON,请谨慎使用正则表达式,并进行充分的测试。使用 JSON 解析库可以提高代码的可读性、可维护性和性能。
以上就是使用 Java 正则表达式或 Jackson 库从字符串中提取 JSON 数组值的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号