在数据交换和序列化领域,Protobuf、JSON、XML 是三种最常用的技术,它们各自有不同的设计理念和适用场景。本文将从新手视角出发,先明确三者的核心定义,再由浅入深讲解它们的语法、C++ 实现方式及核心差异,帮助你快速理解并掌握这三种技术的核心用法。
一、核心定义:先搞懂'是什么'
1. Protobuf(Protocol Buffers)
Protobuf 是 Google 开发的轻量级、跨语言、跨平台的结构化数据序列化协议,通过自定义数据结构定义文件(.proto),编译生成对应语言的代码,实现高效的数据编码和解码,核心特点是'紧凑、高效、可扩展'。
2. JSON(JavaScript Object Notation)
JSON 是一种轻量级的文本数据交换格式,基于 JavaScript 对象语法,但独立于语言,采用键值对的形式组织数据,具有易读、易写、解析成本低的特点,是当前互联网领域最主流的数据交换格式。
3. XML(Extensible Markup Language)
XML 是一种可扩展的标记语言,通过自定义标签来描述数据结构,强调数据的结构化和可读性,语法严格(闭合标签、命名空间等),常用于配置文件、传统系统数据交换场景。
二、基础语法:从'怎么写'开始
1. 数据结构示例:统一场景
为了方便对比,我们以'用户信息'为统一场景,分别用三种技术定义包含「ID、姓名、年龄、爱好列表」的用户数据结构。
(1)Protobuf:先定义后使用
Protobuf 需先编写 .proto 定义文件,再编译生成代码,这是它与 JSON/XML 最大的不同。
步骤 1:编写 user.proto 文件
syntax = "proto3";
message User {
int32 id = 1; // 字段编号(序列化时用,与字段名无关)
string name = 2; // 姓名
int32 age = 3; // 年龄
repeated string hobbies = 4; // repeated 表示数组/列表
}
步骤 2:编译生成 C++ 代码
需先安装 Protobuf 编译器(protoc),执行以下命令生成 C++ 头文件和源文件:
protoc --cpp_out=. user.proto
执行后会生成 user.pb.h 和 user.pb.cc,包含自动生成的 C++ 类和方法。
(2)JSON:纯文本键值对
JSON 无需预定义,直接通过键值对描述数据,语法规则简单:
- 键必须用双引号包裹
- 值支持字符串、数字、布尔、数组、对象、null
- 数组用
[],对象用{}
用户信息的 JSON 示例:
{"id":1001,"name":


