首页 > Java > java教程 > 正文

使用正则表达式从 JSON 数组中提取 JSON 对象

霞舞
发布: 2025-10-09 10:32:24
原创
293人浏览过

使用正则表达式从 json 数组中提取 json 对象

本文旨在提供一种使用 Java 正则表达式从 JSON 数组中提取独立 JSON 对象的方法。通过使用特定的正则表达式和 Java 的 Pattern 类,可以将包含多个 JSON 对象的字符串分割成独立的、可解析的 JSON 对象字符串,以便后续处理和反序列化。本文将提供代码示例和详细解释,帮助读者理解和应用该技术。

从 JSON 数组中提取 JSON 对象是一个常见的任务,特别是在处理 API 响应或读取包含多个对象的 JSON 文件时。虽然有很多 JSON 解析库可以完成这个任务,但在某些情况下,使用正则表达式可能是一种更灵活或更快速的解决方案。

以下是如何使用 Java 正则表达式来实现此目的:

1. 正则表达式

用于提取 JSON 对象的正则表达式如下:

(?s)(?<=^    )\{.*?(?<=^    )}
登录后复制

这个正则表达式的含义如下:

  • (?s): 启用 dotall 模式,允许 . 匹配包括换行符在内的所有字符。
  • (?<=^ ): 正向后顾断言,确保匹配的 { 前面是行首(^)加上四个空格。这假设 JSON 数组中的对象是按照问题中的格式进行缩进的。
  • \{: 匹配左大括号 {。需要转义,因为 { 在正则表达式中具有特殊含义。
  • .*?: 匹配任意字符(除了换行符,除非使用了 (?s)),尽可能少地匹配。
  • (?<=^ )}: 正向后顾断言,确保匹配的 } 前面是行首(^)加上四个空格。
  • \}: 匹配右大括号 }。同样需要转义。

2. Java 代码示例

以下是一个使用该正则表达式的 Java 代码示例:

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online30
查看详情 Find JSON Path Online
import java.util.List;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
import static java.util.stream.Collectors.toList;

public class JsonExtractor {

    public static void main(String[] args) {
        String input ="[
" +
                "    {
" +
                "        "name": "User1",
" +
                "        "gender": "M"
" +
                "    },
" +
                "    {
" +
                "        "name": "User2",
" +
                "        "gender": "F"
" +
                "    }
" +
                "]";

        List<String> jsonObjects = Pattern.compile("(?sm)(?<=^    )\{.*?(?<=^    )}")
                .matcher(input).results()
                .map(MatchResult::group)
                .map(str -> str.replaceAll("[\s\n]*(?!"),)", "")) // remove whitespace
                .collect(toList());

        System.out.println(jsonObjects);
    }
}
登录后复制

这段代码首先定义了一个包含 JSON 数组的字符串 input。然后,它使用 Pattern.compile() 方法编译正则表达式,并使用 matcher() 方法创建一个 Matcher 对象。results() 方法返回一个 MatchResult 流,map(MatchResult::group) 从每个匹配项中提取匹配的字符串。最后,使用 collect(toList()) 将提取的字符串收集到一个 List 中。代码中还添加了一个额外的 map 操作,用于移除每个 JSON 对象字符串中的空格和换行符,以获得更简洁的输出。正则表达式 [\s\n]*(?!"),) 用于匹配所有空格和换行符,除非它们紧跟在双引号后面。

3. 输出

运行上述代码将产生以下输出:

[{"name":"User1","gender":"M"}, {"name":"User2","gender":"F"}]
登录后复制

4. 注意事项

  • JSON 格式: 此正则表达式依赖于 JSON 对象的特定格式,即每个对象都以四个空格缩进。如果 JSON 格式不同,则需要调整正则表达式。
  • 性能: 对于非常大的 JSON 文件,使用 JSON 解析库通常比使用正则表达式更有效。
  • 复杂性: 正则表达式可能难以理解和维护。在复杂的 JSON 结构中,使用 JSON 解析库通常是更好的选择。
  • 转义字符: 确保正确转义正则表达式中的特殊字符,例如 和 {。
  • 异常处理: 在实际应用中,应添加适当的异常处理机制,以处理无效的 JSON 格式或正则表达式错误。

5. 总结

本文介绍了一种使用 Java 正则表达式从 JSON 数组中提取 JSON 对象的方法。虽然正则表达式可能不是处理 JSON 的最佳方法,但在某些情况下,它可以提供一种快速而灵活的解决方案。在使用正则表达式处理 JSON 时,请务必注意 JSON 格式、性能和复杂性,并确保正确转义正则表达式中的特殊字符。对于更复杂的 JSON 结构,建议使用专门的 JSON 解析库。

以上就是使用正则表达式从 JSON 数组中提取 JSON 对象的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号