json 因解析快、体积小、语法直觉、调试便捷成为现代 api 默认格式;浏览器和移动端原生支持 json,xml 则依赖第三方库且易出错;rest 接口应优先用 accept 头而非 url 后缀协商格式;同数据 json 比 xml 小 30%–50%,弱网下优势显著。

现代 API 接口默认用 JSON,不是因为它“新”,而是它在绝大多数 Web 和移动场景下,解析更快、体积更小、写起来更直觉、调试更省事——XML 只在少数强约束、老系统或文档级需求里不可替代。
为什么浏览器和移动端都偏爱 JSON.parse() 而不是 DOMParser
JavaScript 原生支持 JSON.parse() 和 JSON.stringify(),零依赖、无编码歧义、不报错;而 XML 解析必须走 DOMParser 或第三方库(如 xml2js),稍有缩进、命名空间、CDATA 或 BOM 就可能抛 SyntaxError 或静默失败。
- Android/iOS SDK 默认反序列化 JSON,
Retrofit、Alamofire都内置 JSON 支持,XML 得额外配SimpleXML或手写XmlPullParser - Chrome 控制台直接展开 JSON 响应树;XML 则显示为扁平文本,得复制到外部工具才能看清结构
-
fetch('/api/user').then(r => r.json())是一行的事;.then(r => r.text()).then(str => new DOMParser().parseFromString(str, 'application/xml'))才刚起步
Accept: application/json 比 /users.xml 更靠谱的内容协商
靠 URL 后缀(比如 /users.json)切换格式,看着简单,实则破坏 REST 原则,也增加路由维护成本;正确做法是统一用 Accept 请求头驱动服务端响应格式,由框架自动分发。
- Express 用
res.format(),Spring Boot 用@ResponseBody+Jackson2HttpMessageConverter(JSON)和Jaxb2RootElementHttpMessageConverter(XML) - 但注意:Spring Boot 3.x 默认禁用 XML 支持,需显式加
spring-boot-starter-web+org.glassfish.jaxb:jaxb-runtime - Flask 默认没 XML 支持,硬上容易遇到
UnicodeEncodeError,尤其含中文时
同个数据,JSON 体积比 XML 小 30%–50%,这在移动端真会卡顿
一个用户对象:{"id":123,"name":"李四","active":true} 是 38 字符;等价 XML:<user><id>123</id><name>李四</name><active>true</active></user> 是 72 字符——多出近一倍。高并发或弱网下,这点差异直接影响首屏时间和错误率。
- JSON 不需要转义
、<code>&、"等字符(字段名天然双引号包裹);XML 的属性值和文本内容都要实体化,增加序列化负担 - JSON 数字/布尔是原生类型,XML 全是字符串,后端还得做
Integer.parseInt()这类转换,容易漏校验导致NumberFormatException - 别为了“看起来正式”返回 XML——REST 不看格式是否庄重,只看接口是否可发现、可缓存、无状态
真正要选 XML 的时候很少:银行核心要求 XSD 校验、医疗系统对接 HL7/FHIR 的 XML 变体、或者你得把 API 直接喂给 XSLT 渲染成 HTML。其他情况,先写 JSON;真遇到对方只认 XML,加个网关层转换更稳妥,别污染主逻辑。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










