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

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

相关推荐
谢斯19 小时前
[unity]如何在unity中添加newtonsoft-json
unity·json·游戏引擎
2601_962066932 天前
短视频批量制作怎么做?2026年用 huasheng-cli 的 --json 与退出码,一张选题表批量出片
json·音视频
oliver_sys_log3 天前
老项目 json-lib 2.4 JSONTokener 精度丢失问题排查
json
spencer_tseng3 天前
[j2cache ehcache.xml]/tmp/.ehcache-diskstore.lock (Permission denied)
xml·linux·python·ehcache·[j2cache
IT_Octopus3 天前
JSON 日志里的 `{“$ref“:“$.xxx“}`:从 fastjson 兼容包到原生 fastjson2 的迁移实录
开发语言·python·json
数据狐(Datafox)3 天前
mercadolibre.item_get 工程实战:美客多商品详情API技术解析与落地应用
java·人工智能·mysql·json
Fcy6483 天前
Linux下 应⽤层⾃定义协议与序列化(JSON方法)
linux·json
DevOpenClub4 天前
PDF 多格式解析如何避免混用输出:TEXT、HTML、XML 与 TAG 数据契约
xml·前端·数据库·pdf·html
Java小白笔记4 天前
MyBatis XML Mapper 标签与 CRUD 原理实战
xml·数据库·mybatis
半亩码田4 天前
C#转Python第4.4篇:JSON 处理:json 模块 vs System.Text.Json
python·c#·json