XML、JSON 和 Protocol Buffers (protobuf) 对比

目录

[1. XML (eXtensible Markup Language)](#1. XML (eXtensible Markup Language))

1)xml的特点:

2)xml的适用场景:

[2. JSON (JavaScript Object Notation)](#2. JSON (JavaScript Object Notation))

1)JSOM的特点:

2)JSON的适用场景:

[3. Protocol Buffers (protobuf)](#3. Protocol Buffers (protobuf))

1)protobuf的特点:

2)适用场景:

4.对比总结

5.选择建议


XML、JSON 和 Protocol Buffers (protobuf)这三种都是常用的数据交换格式 ,各有特点和适用场景。 接下来我会详细介绍 这三种数据交换格式并对比其优缺点

1. XML (eXtensible Markup Language)

1)xml的特点

  • 标签式标记语言,可扩展性强

  • 严格的结构化格式

  • 可读性好,但冗余较多

  • 支持命名空间和复杂数据类型

XML 复制代码
​
<person>
  <name>张三</name>
  <age>30</age>
  <address>
    <city>北京</city>
    <street>朝阳区</street>
  </address>
</person>

​

总的来说:

|---------|------------------------|
| xml | |
| 优点 | 代码可读性好 |
| 缺点 | 冗余信息太多,在网络传输中,消耗了更多的带宽 |

2)xml的适用场景

  • 企业级系统集成

  • 配置文件(如Spring配置)

  • 需要严格数据验证的场景

  • Web服务(SOAP)

2. JSON (JavaScript Object Notation)

1)JSOM的特点

  • 轻量级,易于阅读和编写

  • 键值对结构,与编程语言对象模型天然契合

  • 比XML更简洁,冗余少

  • 广泛用于Web应用

XML 复制代码
{
  "person": {
    "name": "张三",
    "age": 30,
    "address": {
      "city": "北京",
      "street": "朝阳区"
    }
  }
}

2)JSON的适用场景

  • Web API(RESTful服务)

  • 前后端数据交互

  • 移动应用数据传输

  • NoSQL数据库(如MongoDB)

3. Protocol Buffers (protobuf)

1)protobuf的特点

  • Google开发的二进制协议

  • 高度压缩,传输效率高

  • 需要预定义.proto文件

  • 跨语言支持好

  • 序列化/反序列化速度快

XML 复制代码
// 定义.proto文件
message Person {
  required string name = 1;
  optional int32 age = 2;
  
  message Address {
    required string city = 1;
    optional string street = 2;
  }
  
  optional Address address = 3;
}

2)适用场景

  • 高性能RPC通信(gRPC)

  • 微服务间通信

  • 需要高吞吐量的系统

  • 移动应用节省流量

4.对比总结

特性 XML JSON Protocol Buffers
数据格式 文本(标签) 文本(键值对) 二进制
优点 代码可读性好 可读性中等,但是消耗的带宽比xml更少 基于二进制的格式对数据进行压缩,不涉及xml和json的荣誉信息,贷款消耗最少
缺点 冗余信息过多,在网络传输中消耗更多带宽 依然存在冗余信息 完全不可读
可读性 差(需工具解析)
大小 中等 很小
解析速度 中等 很快
扩展性 中等 需要预定义
跨语言
典型应用 企业系统集成 Web API 高性能RPC

5.选择建议

  1. 需要人类可读/调试:选择JSON或XML

  2. 追求最高性能:选择protobuf

  3. Web开发:首选JSON

  4. 企业级系统:考虑XML

  5. 微服务/gRPC等对性能要求高的场景:protobuf是最佳选择

现代开发中,JSON因其简洁性和广泛支持已成为最流行的选择,但在性能敏感场景下,protobuf有明显优势。XML则在传统企业系统中仍有重要地位。

应在不同的场景下选择合适的数据交换格式。

相关推荐
五行星辰1 小时前
SAX解析XML:Java程序员的“刑侦破案式“数据处理
xml·java·开发语言
yzhSWJ8 小时前
MySQL 中查询 VARCHAR 类型 JSON 数据的
mysql·adb·json
小旺不正经13 小时前
txt、Csv、Excel、JSON、SQL文件读取(Python)
sql·json·excel
杰尼杰尼丶16 小时前
XDocument和XmlDocument的区别及用法
xml·可扩展标记语言·xdocument·xmldocument
lilye6621 小时前
程序化广告行业(80/89):近年发展动态与技术标准演进
sql·json·rabbitmq
十秒耿直拆包选手1 天前
spring:xml方式调用构造方法创建Bean,调用set方法配置字段
xml·java·spring
积跬步至千里PRO1 天前
理解JSON-RPC 2.0 协议
qt·rpc·json
dony72471 天前
大模型 json格式 修复
llm·json
二川bro1 天前
Vue 项目中 package.json 文件的深度解析
前端·vue.js·json