springboot xml json doc等选择

news/2025/11/4 16:26:01/文章来源:https://www.cnblogs.com/hanease/p/19190674

--------------------------------------------------------------------------------------------------------

XML 和 JSON,是程序员几乎每天都会打交道的数据、特别是配置数据的承载格式。我想你心里应该有一个大致的印象,它们二者各有什么优劣,但是也许没有系统地比较过。那今天我们就把它们放到一起,丁是丁卯是卯地分析分析,对比一下它们各自的特点。另外,这些年来,对于配置,特别是复杂 DSL 的配置,YAML 也逐渐流行开来,因此我们也把它拿过来剖析一番。

XML 和 JSON 的比较
XML 全称叫做 Extensible Markup Language,就像 HTML、CSS 一样,是一种标记语言(标记语言不属于传统意义上的编程语言),且是一种具备结构化特征的数据交换语言;类似地,JSON,也就是 JavaScript Object Notation,被称作 JavaScript 对象表示法,非结构化,更轻量,但归根结底也是一种数据交换语言。因此,二者具备相当程度的相似性,在实际应用中,往往也可以比较和替代。

1. 简洁还是严谨
在 [第 04 讲] 的时候,介绍了 REST 和 SOAP 这样一个简洁、一个严谨的俩兄弟。而在本讲中,JSON 和 XML 也在一定程度上同样满足这样的比较关系,JSON 往往是更为简洁、快速的那一个,而 XML 则更为严谨、周全。

我们来看一个简单的例子,id 为 1 的城市北京:

<?xml version="1.0" encoding="UTF-8" ?>
<city>
<name>Beijing</name>
<id>1<id>
</city>
一键获取完整项目代码
XML
如果用 JSON 表示:

{
"city": {
"name": "Beijing",
"id": 1
}
}
一键获取完整项目代码
bash
你可能会说,除了 XML tag 的名字,在 JSON 中只需要写一遍以外,看起来复杂复杂、严谨的程度似乎也差不太多啊。

别急,往下看。XML 的结构,强制要求每一个内容数据,都必须具备能够说明它的结构,而 JSON 则没有这样的要求。比方说,如果我们把城市组成数组,用 XML 来表示,请你把这个文件存成 cities.xml,因为我们会多次用到这个文件:

<?xml version="1.0" encoding="UTF-8" ?>
<cities>
<city>
<name>Beijing</name>
<id>1</id>
</city>
<city>
<name>Shanghai</name>
<id>2</id>
</city>
</cities>
一键获取完整项目代码
XML

如果使用 JSON 的话,由于对于数组可以使用中括号直接支持,而不需要显式写出上例中的 city 这个 tag 的名称,请你同样建立 cities.json:

{
"cities": [
{"name": "Beijing", "id": 1},
{"name": "Shanghai", "id": 2}
]
}
一键获取完整项目代码
bash
从这就可以看出,在这种情况下,JSON 似乎确实要更为简洁一些。上例中 JSON 能够使用中括号直接表示数组,能够直接支持数值、字符串和布尔型的表示。

等等,这样说的话,JSON 因为能够直接支持数值的表示,这个 id 没有双引号修饰,就是数值类型,可是从 XML 中并不能看出这一点啊。因此,从这个角度说,应该是 JSON 更严谨啊!那为什么说 XML 更严谨,严谨在哪呢?

有些程序员朋友可能会马上想到,XML 是可以定义 tag 属性的,预定义一个 type 不就好了?

<city>
<name type="String">Beijing</name>
<id type="number">1<id>
</city>
一键获取完整项目代码
XML
看起来也能达到“严谨”的目的,可这很可能就是一个不好的实践了,因为 XML 对于这些常见的数据类型,内置了直接的支持。我们可以通过定义 XML Schema Definition(XSD)来对 XML 的结构做出明确的要求,也就是说,我们不必自己去造轮子,来定义并实现这个 type 属性。针对上面的 cities.xml,我们可以定义这样的 XSD:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="cities">
<xs:complexType>
<xs:sequence>
<xs:element name="city" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:byte" name="id"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
一键获取完整项目代码
XML

这样一来,我们就对 cities 和 city 这两个 tag 做了严格的内容限定,包括包含的子节点有哪些,顺序如何,取值类型是什么等等。在实际的 XML 定义中,我们可以引用这个 XSD,这样 XML 的处理程序就会加载这个 XSD 并根据 schema 的规则对 XML 进行校验,从而发现 XML 不合要求的问题。

进一步地,你可以自己动动手,看一下这个工具,它可以帮助你通过 XML 快速生成样例 XSD;而这个工具则可以帮你快速验证 XML 是不是满足某 XSD 的要求,它们都很有用。

补充一下,你可能也听说过,或使用过类似的叫做 DTD,也就是 Document Type Definition 的方式,能想到这个很好,但是 XSD 相对来说有着更大的优势,并成为了 W3C 的标准。因此我在这里不提 DTD,但是我在扩展阅读中放了关于 XSD 和 DTD 的比较材料,供感兴趣的朋友拓展。

我想,从 XSD 你应该可以体会到 XML 的严谨性了。那喜爱使用 JSON 的程序员,就不能创造一个类似的东西,来填补这个坑——即定义和保证 JSON 的严谨性吗?

有,它就是 JSON Schema,也许你已经在项目中使用了,但是还没有统一成标准,也没有被足够广泛地接纳,因此我就不展开来说了。你可以自己实践一下,把上面提到的 JSON 填写到这个 JSON Schema 推断工具上面,去看看生成的 JSON Schema 样例。

2. JavaScript 一家亲
对于全栈工程师来说,和 XML 比较起来,JSON 对于前端开发来说,可以说有着不可比拟的亲和力。本来,JSON 就是 JavaScript 对象表示法,就是从 JavaScript 这个源头发展而来的,当然,JSON 如今是不依赖于任何编程语言的。这个“一家亲”,首先表现在,JSON 和 JavaScript 对象之间的互相转化,可以说是轻而易举的。

我们来动动手实践一下,打开 Chrome 的开发者工具,切换到 Console 页,打开前面建立的 cities.json,拷贝其中的内容到一对反引号(backtick,就是键盘上 esc 下面的那个按键)中,并赋给变量 text:

var text = `JSON 字符串`;
一键获取完整项目代码
javascript
我们很轻松地就可以把它转化为 JavaScript 对象(反序列化),不需要任何第三方的 parser:

var obj = JSON.parse(text);
一键获取完整项目代码
javascript
在早些时候的 ES 版本中,这个方法不支持,那么还可以使用 eval 大法,效果是一样的:

var obj = eval('(' + text + ')');
一键获取完整项目代码
javascript
不过,在现代浏览器中,如果 text 不是绝对安全的,就不要使用这样的方法,因为 eval 可以执行任何恶意代码。

当然,我们也可以把 JavaScript 对象转换回(序列化)JSON 文本:

var serializedText = JSON.stringify(obj);
一键获取完整项目代码
javascript
完成以后,先不要关闭控制台,下面还会用到。

--------------------------------------------------------------------------------------------------------

JSON、XML、TOML、CSON、YAML 大比拼

在数据序列化和配置文件领域,JSON、XML、TOML、CSON 和 YAML 是五种常见的格式。它们各有优缺点,适用于不同的场景。下面我们将从定义、应用场景、优缺点等方面进行详细对比。

1. JSON (JavaScript Object Notation)

定义

JSON 是一种轻量级的数据交换格式,基于 JavaScript 的对象语法,易于人阅读和编写,也易于机器解析和生成。

语法示例

应用场景

  • Web API 数据交换:JSON 是 RESTful API 中最常用的数据格式。

  • 配置文件:许多工具和框架(如 ESLint、Prettier)使用 JSON 作为配置文件格式。

  • 数据存储:NoSQL 数据库(如 MongoDB)支持 JSON 格式的数据存储。

优点

  • 简洁:语法简单,易于阅读和编写。

  • 广泛支持:几乎所有编程语言都支持 JSON 解析和生成。

  • 轻量级:文件体积小,传输效率高。

缺点

  • 不支持注释:JSON 标准不支持注释,不适合需要注释的配置文件。

  • 数据类型有限:仅支持字符串、数字、布尔值、数组、对象和 null

2. XML (eXtensible Markup Language)

定义

XML 是一种标记语言,用于存储和传输数据,具有自我描述性。

语法示例

应用场景

  • 数据交换:XML 曾广泛用于 Web 服务和 SOAP 协议。

  • 配置文件:Java 生态系统(如 Maven、Spring)常用 XML 作为配置文件格式。

  • 文档存储:Microsoft Office 文件(如 .docx.xlsx)内部使用 XML。

优点

  • 可扩展性:支持自定义标签和结构。

  • 支持注释:XML 支持注释,适合需要注释的配置文件。

  • 广泛支持:几乎所有编程语言都支持 XML 解析和生成。

缺点

  • 冗长:语法繁琐,文件体积大。

  • 解析复杂:解析 XML 需要更多的计算资源。

3. TOML (Tom's Obvious, Minimal Language)

定义

TOML 是一种旨在易于阅读和编写的配置文件格式,语法类似于 INI 文件。

语法示例

应用场景

  • 配置文件:TOML 常用于 Rust 项目(如 Cargo)和 Python 项目(如 Poetry)。

  • 数据存储:适合需要人类可读的配置文件。

优点

  • 简洁易读:语法简单,易于阅读和编写。

  • 支持注释:支持行注释(#)。

  • 数据类型丰富:支持字符串、数字、布尔值、数组、表等。

缺点

  • 生态系统较小:相比 JSON 和 YAML,TOML 的生态系统较小。

  • 嵌套结构复杂:处理嵌套结构时语法稍显繁琐。

4. CSON (CoffeeScript Object Notation)

定义

CSON 是一种基于 CoffeeScript 语法的配置文件格式,支持更灵活的语法。

语法示例

应用场景

  • 配置文件:Atom 编辑器使用 CSON 作为配置文件格式。

  • 数据存储:适合需要灵活语法的配置文件。

优点

  • 语法灵活:支持多行字符串、注释等。

  • 易于阅读:语法简洁,适合人类阅读。

缺点

  • 生态系统较小:CSON 的生态系统较小,支持的工具和库较少。

  • 解析复杂:解析 CSON 需要额外的库支持。

5. YAML (YAML Ain't Markup Language)

定义

YAML 是一种人类可读的数据序列化格式,旨在简洁易读。

语法示例

应用场景

  • 配置文件:Kubernetes、Ansible、GitLab CI 等工具使用 YAML 作为配置文件格式。

  • 数据交换:适合需要人类可读的数据交换场景。

优点

  • 简洁易读:语法简洁,适合人类阅读和编写。

  • 支持注释:支持行注释(#)。

  • 数据类型丰富:支持字符串、数字、布尔值、数组、对象等。

缺点

  • 缩进敏感:YAML 依赖缩进,容易因缩进错误导致解析失败。

  • 解析复杂:处理复杂数据结构时,解析器实现较为复杂。

对比总结

选择建议

  • JSON:适合 Web API 数据交换和简单的配置文件。

  • XML:适合需要复杂结构和注释的场景(如 Java 生态系统)。

  • TOML:适合需要简洁易读的配置文件(如 Rust、Python 项目)。

  • CSON:适合需要灵活语法的配置文件(如 Atom 编辑器)。

  • YAML:适合需要人类可读的配置文件和数据交换(如 Kubernetes、Ansible)。

--------------------------------------------------------------------------------------------------------

springboot xml doc json 等选择
在 Spring Boot 项目中选择 XML、DOC、JSON 等格式,核心取决于数据的用途场景(如配置、数据交换、文档存储),不同格式的设计目标和适用场景差异显著。以下是具体选择建议:

一、核心格式对比与适用场景

先通过表格明确各格式的核心定位,再分场景给出选择逻辑:
格式核心用途优势劣势典型场景
JSON 数据交换、接口通信 轻量简洁、易读性强、前后端兼容性好、解析效率高 不支持注释(标准)、不适合复杂配置层级 接口请求 / 响应(RESTful API)、前后端数据传输、配置文件(少量)
XML 配置文件、复杂数据结构、协议规范 支持注释、层级结构严谨、可定义 Schema 校验、适合复杂配置 格式冗余(标签多)、解析效率低于 JSON Spring 配置文件(如 application.xml)、SOAP 协议、复杂配置文件(如 MyBatis 映射文件)
DOC 文档存储、办公场景 支持富文本(字体、排版、图片)、办公软件兼容性好 二进制格式(非纯文本)、不适合数据交换、解析复杂 项目文档(需求文档、接口文档)、报表导出(如用户订单详情文档)

二、分场景选择建议

1. 数据交换场景(接口 / 服务间通信)

优先选 JSON,这是 Spring Boot 项目的默认和主流选择:
  • 前后端交互:前端(Vue/React)和后端(Spring Boot)对 JSON 支持原生且完善,无需额外转换。
  • 服务间调用:微服务(如 Spring Cloud)中,Feign、OpenFeign 默认使用 JSON 作为数据传输格式,解析效率高。
  • 例外场景:若需严格的结构校验(如金融、医疗行业),可考虑 XML(配合 XSD 校验),但需接受格式冗余。

2. 配置文件场景(项目配置、框架配置)

优先选 YAML/Properties(Spring Boot 推荐),其次根据框架要求选 XML:
  • Spring Boot 自身配置:优先用 application.yml 或 application.properties,YAML 支持层级结构(比 XML 简洁),Properties 适合简单键值对。
  • 框架特定配置:若框架强制要求 XML(如 MyBatis 的 Mapper.xml、Spring 早期的 applicationContext.xml),则必须用 XML(需遵循框架规范)。
  • 不推荐场景:不建议用 JSON 做复杂配置(如多环境、多层级配置),因为标准 JSON 不支持注释,且层级可读性不如 YAML。

3. 文档存储 / 导出场景

根据文档类型选格式:
  • 富文本文档(含排版、图片):选 DOC/DOCX(如导出用户合同、项目需求文档),可通过 EasyPOI、Apache POI 等工具生成。
  • 结构化文档(纯数据 + 简单格式):若需轻量导出(如数据报表),可优先用 JSON(纯文本,易解析)或 CSV(表格数据),DOC 仅在需办公排版时使用。

4. 协议规范场景

按协议要求选择:
  • RESTful API:固定用 JSON(行业默认),少数情况用 XML(如对接旧系统)。
  • SOAP 协议:强制用 XML(协议规范要求),适合企业级复杂接口(需严格结构校验)。
  • 配置中心:Nacos/Apollo 等配置中心,支持 JSON/YAML/Properties,优先选 YAML(层级清晰)。

三、Spring Boot 项目最佳实践

  1. 接口通信(默认 JSON):
    • 无需额外配置,Spring Boot 内置 jackson-databind 依赖,自动实现对象与 JSON 的转换。
    • 若需 XML 接口,只需在 pom.xml 引入 jackson-dataformat-xml 依赖,即可支持 XML 格式的请求 / 响应。
  2. 配置文件(优先 YAML):
    • 用 application.yml 管理多环境配置(如 application-dev.ymlapplication-prod.yml),通过 spring.profiles.active 切换。
    • 复杂框架配置(如 MyBatis 映射):按框架要求用 XML(如 UserMapper.xml),不可替代。
  3. 文档导出(按需选择):
    • 接口文档:用 Swagger/Knife4j 自动生成(支持 JSON/HTML 格式),无需手动写 DOC。
    • 业务文档(如订单导出):需富文本选 DOC(用 EasyPOI 工具),纯数据选 JSON/CSV。

总结

  • 优先选 JSON:数据交换、接口通信场景,轻量高效且兼容性好。
  • 必要时选 XML:复杂配置(框架强制)、协议规范(如 SOAP)场景,利用其严谨的层级和校验能力。
  • DOC 仅用于办公文档:如富文本需求的文档存储 / 导出,不用于数据交换或配置。
实际项目中无需 “二选一”,可根据场景混合使用(如 JSON 做接口、XML 做 MyBatis 配置、DOC 做项目文档),Spring Boot 对这些格式均有完善支持。
要不要我帮你整理一份Spring Boot 各场景格式配置示例?比如 JSON 接口配置、XML 配置文件用法、DOC 导出工具代码,直接复制就能用。

--------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/955814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年 11 月科氏力质量流量计,热式气体质量流量计,质量流量计厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读

引言 近期,行业权威协会针对科氏力质量流量计、热式气体质量流量计及质量流量计厂家开展专项测评,测评覆盖全球范围内百余家主流企业,从资质认证、实际应用案例、售后服务三大核心维度出发,采用数据量化分析与实地…

面向对象思考

面向对象思考 面向对象思考:核心理念 面向对象编程(OOP)的核心是将数据与操作数据的方法耦合为对象,以“对象”为基本单元构建程序,更贴合现实世界的问题建模方式。相比面向过程编程(以“方法”为核心,数据与方…

2025年工业用防爆除湿机生产厂家权威推荐榜单:防爆恒温恒湿机/防爆工业除湿机/防爆调温除湿机源头厂家精选

在石油化工、航空航天、电力能源等高风险行业,防爆除湿设备已成为保障生产安全、提升产品质量的关键环节。 随着国家对工业安全生产要求的不断提高,防爆除湿机市场需求呈现稳定增长。2024年,该品类产品国内市场询盘…

救命

感觉自从昨天秒了 T2 之后精神就不正常了。 现在怎么说呢,处于一种极其抽象的混沌状态,无法干任何有意义工作,大脑已经崩溃了。 今天模拟赛就能看出来我完全开摆了,丝毫不想写。 不知道该咋办,感觉在学校短时间内…

超越简单的回放:深度解析国标GB28181算法算力平台EasyGBS的录像检索与回放技术

超越简单的回放:深度解析国标GB28181算法算力平台EasyGBS的录像检索与回放技术在安防监控领域,国标GB28181国家标准如同“通用语言”,实现了不同安防设备与平台之间的互联互通。然而,仅仅实现设备的接入和实时预览…

2025年聚四氟乙烯膜生产厂家权威推荐榜单:特氟隆膜/铁氟龙膜/特氟龙膜源头厂家精选

在新能源与环保产业快速发展的推动下,聚四氟乙烯(PTFE)膜材料市场需求持续增长。据2025年行业统计数据显示,中国PTFE膜材料市场规模已达286亿元,年均增长率稳定在18%以上。 随着过滤材料、建筑材料和电子工业的升…

详细介绍:⸢ 柒-Ⅱ⸥ ⤳ 可信纵深防御建设方案:应用可信网络可信

详细介绍:⸢ 柒-Ⅱ⸥ ⤳ 可信纵深防御建设方案:应用可信&网络可信pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

一个BFS的trick

前言 感觉这个一个典中典典做法,但是我还是不会() 今天第二次遇到这个问题(上一次的找不到了),所以记录一下做法 CF2041D Drunken Maze 思路 对于在走迷宫的基础上加入“不能连续往一个方向走 \(k\) 步”限制的问…

2025 年 11 月股权设计财税合规公司推荐排行榜,股权架构设计,财税合规方案,企业股权激励,税务筹划公司推荐

2025年11月股权设计财税合规公司推荐排行榜:股权架构设计与财税合规方案深度解析 一、行业背景与发展趋势 随着我国市场经济体制的不断完善和企业治理结构的持续优化,股权设计与财税合规已成为企业健康发展的关键支撑…

Python原型链污染从基础到深入

之前看过许多有关Python原型链污染的题,自己一道也没能做出。 于是今天下定决心好好把这个问题解决一下 1.什么是Python原型链污染? Python原型链污染是一种通过修改对象原型链中的属性,导致程序行为偏离预期的攻击…

2025 年 11 月中小企业财税合规服务权威推荐榜:专业筹划与风险防控口碑之选

2025 年 11 月中小企业财税合规服务权威推荐榜:专业筹划与风险防控口碑之选 行业背景与发展趋势 随着我国税收监管体系的不断完善和金税四期系统的全面推行,中小企业财税合规管理正面临前所未有的挑战与机遇。2025年…

2025 年 11 月财税合规平台推荐榜单:平台报送财税合规,企业财税合规,财税合规服务,专业财税合规平台公司精选指南

2025 年 11 月财税合规平台推荐榜单:平台报送财税合规,企业财税合规,财税合规服务,专业财税合规平台公司精选指南 一、行业背景与发展趋势 随着数字经济时代的深入发展,企业财税合规管理正面临前所未有的变革与挑…

11月4号到11月9号的计划安排

7点半到8点:每天早上在扇贝背单词,现在打卡天数为22天,目标是28天六级:软考:数学:政治:java:蓝桥杯:c++:07:30 - 08:00 【固话】扇贝单词 开启一天,完成打卡,目标是28天乃至更久。唤醒大脑。 08:30 - 10:0…

RCE漏洞基础以及绕过

what is RCE?目标:攻击者通过构造恶意输入或请求,绕过系统安全机制,在目标服务器或应用程序中注入并执行代码。 本质:系统未对用户输入进行充分验证或过滤,导致攻击者能将恶意代码传递到执行环境中。常见可以被利…

详细介绍:数据结构:树

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

SQL注入基础及绕过手段

SQL注入是什么 简单来说SQL注入,就是将攻击者输入的恶意代码被传到后端与SQL语句一起构造并在数据库中执行 通过不同的手段,SQL注入可以分为一下几类select * from article where artid = 1 and xxxxx; 首先我们来看…

WPF实现组件拖动(Grid)

xaml: <Window x:Class="WpfApp3Test.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/200…

关于嵌入式硬件需要了解的基础知识 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

api测试

这是一个用于测试的博客,发布后会马上删除,如果你看到这个信息,请忽略

spring-boot-actuator-Health原理

说明 在容器化部署下,如何判断服务是否健康通过 curl 127.0.0.1:8080/actuator/health检查 是否是健康状态 使用示例以sentinel为例 实现抽象类public class SentinelHealthIndicator extends AbstractHealthIndicat…