JSON的C实现(上)
- JSON的C实现(上)
- 前言
- JSON简介
- JSON的C实现思路
- 小结
JSON的C实现(上)
前言
JSON是众多项目中较为常见的数据交换格式,为不同项目、系统间的信息交换提供了一个规范化标准。JSON的实现方式有很多,网上也有众多资源。本文是本着学习JSON结构的目的来讲述在C语言中实现JSON,起到抛砖引玉的目的,有别于直接拉取网上资源直接使用。这样方便读者做二次开发。
JSON简介
JSON是一种基于文本的轻量级数据交换格式。具体可参考JSON介绍
其主要有这几种基本结构:
键值对:用“键:值”的形式表示;
例如
"name": "John"
或
"age": 30
对象:被{ }包围,对象里的数据用键值对形式表示,不同的键值对之间用逗号“,”隔开;
例如
{
"name": "John",
"age": 30
}
数组:被[ ]包围,数组是值的集合,不同值之间用逗号“,”隔开;
例如:
[
"掌芯元器",
256,
"true",
{
"name": "John",
"age": 30,
"Lucky numbers": [
3,
5,
6
],
"grades": {
"math": 90,
"english": 95
}
},
[
1,
[
2,
3,
4
],
3
]
]
其中,JSON中的键必须是双引号括起来的字符串;值可以是双引号括起来的字符串、数值、布尔值、null、对象或者数组,它们之间是可以嵌套的,如下图:
JSON的C实现思路
我们由上文可知,JSON是由键值对、值、数组、对象等组成,我们要建立一个统一的数据结构来表示他们,并且它们之间可能存在着嵌套的关系,这些组成是树状结构,因此我们可以将其分为一个个节点,采用链表的方式将不同层级的数据组织起来。
所以我们创建的数据结构要包含当前节点的结构类型、具体数据、上下级节点的指针。
有了上述的数据结构,接下来就是怎么将字符串与JSON的数据结构进行转换。
我们可以看到JSON的内容表现有数字、BOOL值、字符串、NULL,我们先要编写这些基本的处理函数,然后再进行数据类型转换。
对于此,我们要思考:
如何判断将要处理的数据是字符串、数字、BOOL值、NULL值?以及对应的处理方法是什么?
我们可以将其拆分成一个个独立的函数去处理。
在上述问题的解决过程中,我们还要考虑到JSON的嵌套关系,当遇到"、,、{、}、[、]时,我们需要对其进行处理。
通过上述函数处理完一个JSON字符串之后,我们就可以得到一个个JSON节点,节点的结构中又将不同层级的数据组织起来。
而将JSON结构转换成字符串与上述思路相似,我们只需要将不同数据类型转换成字符串,然后将字符串拼接起来即可。
小结
介于篇幅,本文先对JSON的C实现做一下思想分析。
我们将会在后续的文章具体介绍如何使用C语言实现JSON的解析和转换。