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则在传统企业系统中仍有重要地位。

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

相关推荐
私人珍藏库17 小时前
[Windows] 发票识别工具。支持xml、pdf、ofd文件
xml·pdf
Derrick__12 天前
Python常用内建模块——XML
xml·python
梵得儿SHI2 天前
Java 操作 XML 及动态生成报告:从解析到实战
xml·java·jaxb·dom4j·xml解析·操作xml·报告生成
包达叔2 天前
仿NewLife的XmlConfig类实现Json配置文件
c#·json·newlife
爱吃香蕉的阿豪3 天前
.NET Core 中 System.Text.Json 与 Newtonsoft.Json 深度对比:用法、性能与场景选型
数据库·json·.netcore
千叶寻-4 天前
package.json详解
前端·vue.js·react.js·webpack·前端框架·node.js·json
张太行_4 天前
XML语言解析
xml
未来之窗软件服务4 天前
万象EXCEL开发(五)模拟excel行计算 ——东方仙盟练气期
xml·仙盟创梦ide·东方仙盟·万象excel
睿麒4 天前
鸿蒙app开发中 拿到json文件数据进行动画的播放
json
sun0077004 天前
网络配置config.xml的android.mk解析
android·xml