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

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

相关推荐
☀Mark_LY16 小时前
java读取excel文件返回JSON
java·json·excel
熊出没16 小时前
关于MyBatis Mapper 接口与 XML 映射机制的分析
xml·microsoft·mybatis
love530love17 小时前
【故障解析】Stable Diffusion WebUI 更换主题后启动报 JSONDecodeError?可能是“主题加载”惹的祸
人工智能·windows·stable diffusion·大模型·json·stablediffusion·gradio 主题
晓13131 天前
第一章:Redis 安装与入门
redis·json·nosql
AI视觉网奇2 天前
ue 5.5 c++ mqtt 订阅/发布 json
网络·c++·json
忠实米线2 天前
使用lottie.js播放json动画文件
开发语言·javascript·json
她说..2 天前
FIND_IN_SET()方法
xml·java·spring boot
北辰当尹2 天前
xml基础
android·xml
热爱学习的小翁同学2 天前
SharePoint 列格式化 JSON 配置
json·sharepoint
qq_338032923 天前
Vue/JS项目的package.json文件 和java项目里面的pom文件
java·javascript·vue.js·json