目录
②:Json::StreamWriter 类 ----- 用于数据序列化
③:Json::CharReader 类 ----- 用于数据反序列化
一、前言
在现代软件开发中,JSON(JavaScript Object Notation)已经成为数据交换的标准格式之一。无论是在前后端通信、API 数据传输,还是在配置文件管理中,JSON 的简洁性和可读性使其广泛应用。然而,处理 JSON 数据的关键在于序列化和反序列化——将数据结构转换为 JSON 格式,以及将 JSON 格式解析回数据结构。这篇博客将深入探讨 JSON 序列化和反序列化的概念,并通过实例展示如何在 C++ 中高效地处理 JSON 数据。
二、深度解析序列化和反序列化
🔥引入序列化和反序列化🔥
生活中的类比:打包和解包
- 假设你要寄送一个复杂的玩具给朋友,但这个玩具有很多零件和组件,直接寄送会很麻烦,容易丢失零件,也不方便运输。为了方便,你决定把玩具拆解开来,打包成一个扁平的小盒子,方便运输。
序列化:
- 你把玩具拆解开来,把所有的零件和组件按照一定的顺序放入一个盒子里,并标记好每个零件的位置。这相当于把复杂的对象转化为一个易于存储和传输的格式。
反序列化:
- 朋友收到包裹后,根据你的标记把零件重新组装成原来的玩具。这相当于将线性数据转换回原本的对象。
🔥什么是序列化(Serialization)?🔥
序列化是将 数据结构 或 对象 转换成一种可以存储或传输的格式的过程。简单来说,就是把复杂的数据变成一个“线性”的形式(如字符串、二进制数据),这样就可以方便地存储到文件、数据库,或通过网络传输。
🔥什么是反序列化(Serialization)?🔥
反序列化是序列化的逆过程,它将存储或传输的数据格式转换回原本的数据结构或对象。也就是说,通过反序列化,可以从存储或传输的“线性”数据中恢复出原本的对象或数据结构。
🔥 序列化和反序列化的应用场景🔥
数据存储:
- 在数据库中存储对象时,可以先将对象序列化成一个可以存储的格式(如JSON或二进制),存储后再需要时通过反序列化恢复成对象。
网络传输: (常用)
- 在网络通信中,常常需要将对象序列化为字符串或二进制数据,通过网络传输到另一端,然后通过反序列化恢复成对象。
文件存储:
- 例如保存游戏状态时,可以将游戏对象序列化成文件,之后读取文件时再反序列化恢复游戏状态。
🔥常见的序列化格式🔥
JSON(JavaScript Object Notation):通常存储在 Jsoncpp库中
- 一种基于文本的轻量级数据交换格式,易于阅读和编写。
XML(eXtensible Markup Language):
- 也是一种基于文本的数据交换格式,广泛用于配置文件和数据交换。
二进制格式:
- 某些应用程序会使用二进制格式进行序列化,因为它更紧凑,效率更高。
三、JSON的介绍与使用
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于数据存储和 网络通信中。为了在C++中处理JSON数据,通常使用一些第三方库,如
JsonCpp 库
。
💧JSON的数据格式💧
Json 是⼀种数据交换格式,它采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。
例如 : 我们想表⽰⼀个同学的学⽣信息
- C语言代码表示:
char* name = "xax";int age = 18;float score[3] = {
88.5 , 99 , 58};
- Json****代码表示:
{
"姓名" :"xas", "年龄" : "18", "成绩" : "[88.5 , 99 , 58]", "爱好" : {
"书籍" : "我与地坛", "运动" : "打乒乓球"