0

0

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

霞舞

霞舞

发布时间:2025-10-09 10:32:24

|

316人浏览过

|

来源于php中文网

原创

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

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

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

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

1. 正则表达式

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

(?s)(?<=^    )\\{.*?(?<=^    )}

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

  • (?s): 启用 dotall 模式,允许 . 匹配包括换行符在内的所有字符。
  • (?
  • \\{: 匹配左大括号 {。需要转义,因为 { 在正则表达式中具有特殊含义。
  • .*?: 匹配任意字符(除了换行符,除非使用了 (?s)),尽可能少地匹配。
  • (?
  • \\}: 匹配右大括号 }。同样需要转义。

2. Java 代码示例

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

10分钟内自己学会PHP
10分钟内自己学会PHP

10分钟内自己学会PHP其中,第1篇为入门篇,主要包括了解PHP、PHP开发环境搭建、PHP开发基础、PHP流程控制语句、函数、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、日期和时间等内容;第2篇为提高篇,主要包括MySQL数据库设计、PHP操作MySQL数据库、Cookie和Session、图形图像处理技术、文件和目录处理技术、面向对象、PDO数据库抽象层、程序调试与错误处理、A

下载
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 ="[\n" +
                "    {\n" +
                "        \"name\": \"User1\",\n" +
                "        \"gender\": \"M\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"name\": \"User2\",\n" +
                "        \"gender\": \"F\"\n" +
                "    }\n" +
                "]";

        List 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 解析库。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

420

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

536

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

312

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

515

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

251

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

748

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

215

2023.08.11

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 8万人学习

Java 教程
Java 教程

共578课时 | 53.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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