
在处理包含多个json对象的数组时,我们经常需要将这些对象逐一提取出来进行后续处理。虽然有专门的json解析库(如jackson, gson)可以高效完成此任务,但在某些特定场景下,例如数据格式相对固定、需要快速原型验证或避免引入额外依赖时,正则表达式提供了一种灵活且直接的解决方案。
一个常见的想法是使用字符串的split("},")方法来分割JSON数组。然而,这种方法存在明显缺陷。如果JSON对象内部包含嵌套的JSON对象或数组,"}"字符可能会出现在对象内部,导致错误的分割。例如,{"a": {"b": 1}, "c": 2}中的"}"就会被错误地识别为分隔符。因此,我们需要一个更智能、能够识别完整JSON对象边界的模式。
对于格式化的JSON数组,我们可以利用其结构特点来构建一个精确的正则表达式。假设JSON数组中的每个对象都以特定的缩进开始和结束,例如:
[
{
"name": "User1",
"gender": "M"
},
{
"name": "User2",
"gender": "F"
}
]在这种情况下,每个独立JSON对象都以{开头,并以}结尾,且它们都位于特定缩进(例如,行首的四个空格)之后。基于此,我们可以设计如下正则表达式:
(?sm)(?<=^ ){.*?(?<=^ )}让我们分解这个正则表达式的各个部分:
立即学习“Java免费学习笔记(深入)”;
下面是使用Java Pattern和Matcher类来应用此正则表达式并提取JSON对象的示例代码:
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
import java.util.List;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
import static java.util.stream.Collectors.toList;
public class JsonArrayExtractor {
public static void main(String[] args) {
String jsonInput = "[
" +
" {
" +
" "name": "User1",
" +
" "gender": "M"
" +
" },
" +
" {
" +
" "name": "User2",
" +
" "gender": "F"
" +
" }
" +
"]";
// 定义正则表达式模式
// (?sm) 开启DOTALL和MULTILINE模式
// (?<=^ ) 正向后行断言:匹配内容前必须是行首和四个空格
// { 匹配字面量 '{'
// .*? 非贪婪匹配任意字符(包括换行符)
// (?<=^ )} 正向后行断言:匹配内容后必须是行首和四个空格,然后是字面量 '}'
Pattern pattern = Pattern.compile("(?sm)(?<=^ )\{.*?(?<=^ )}");
// 使用Matcher找到所有匹配项
List<String> jsonObjects = pattern.matcher(jsonInput)
.results() // 获取所有匹配结果流
.map(MatchResult::group) // 提取每个匹配的字符串
// 清理匹配到的JSON字符串中的多余空白和换行符,使其成为紧凑的单行JSON
// [s
]* 匹配任意空白字符(包括换行)0次或多次
// (?!",) 负向先行断言,确保不匹配紧跟在双引号和逗号后的空白,以避免破坏字符串内容
.map(str -> str.replaceAll("[s
]*(?!",)", ""))
.collect(toList()); // 收集到List中
// 打印提取出的JSON对象
jsonObjects.forEach(System.out::println);
}
}输出结果:
{"name":"User1","gender":"M"}
{"name":"User2","gender":"F"}代码解析:
利用正则表达式从格式化的JSON数组中提取独立JSON对象是一种灵活且直接的方法,特别适用于数据格式相对固定、对性能要求不极致的场景。通过精确构造正则表达式,我们可以有效地识别并分离出每个JSON实体。然而,对于复杂的、动态的或不确定格式的JSON数据,强烈建议使用专业的JSON解析库,以确保解析的健壮性和准确性。在选择工具时,应根据具体需求和JSON数据的特点权衡利弊。
以上就是Java中利用正则表达式从JSON数组中提取独立JSON对象的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号