当前位置: 首页 > news >正文

JSON的C实现(上)

JSON的C实现(上)

  • JSON的C实现(上)
    • 前言
    • JSON简介
    • JSON的C实现思路
    • 小结

JSON的C实现(上)

前言

JSON是众多项目中较为常见的数据交换格式,为不同项目、系统间的信息交换提供了一个规范化标准。JSON的实现方式有很多,网上也有众多资源。本文是本着学习JSON结构的目的来讲述在C语言中实现JSON,起到抛砖引玉的目的,有别于直接拉取网上资源直接使用。这样方便读者做二次开发。

JSON简介

JSON是一种基于文本的轻量级数据交换格式。具体可参考JSON介绍

其主要有这几种基本结构:
键值对:用“键:值”的形式表示;
例如


"name": "John"
或
"age": 30

对象:被{ }包围,对象里的数据用键值对形式表示,不同的键值对之间用逗号“,”隔开;
JSON对象示意图

例如


{"name": "John","age": 30
}

数组:被[ ]包围,数组是值的集合,不同值之间用逗号“,”隔开;
JSON数组示意图

例如:


["掌芯元器",256,"true",{"name": "John","age": 30,"Lucky numbers": [3,5,6],"grades": {"math": 90,"english": 95}},[1,[2,3,4],3]
]

其中,JSON中的键必须是双引号括起来的字符串;值可以是双引号括起来的字符串、数值、布尔值、null、对象或者数组,它们之间是可以嵌套的,如下图:

JSON值示意图

JSON的C实现思路

我们由上文可知,JSON是由键值对、值、数组、对象等组成,我们要建立一个统一的数据结构来表示他们,并且它们之间可能存在着嵌套的关系,这些组成是树状结构,因此我们可以将其分为一个个节点,采用链表的方式将不同层级的数据组织起来。

所以我们创建的数据结构要包含当前节点的结构类型、具体数据、上下级节点的指针。

有了上述的数据结构,接下来就是怎么将字符串与JSON的数据结构进行转换。

我们可以看到JSON的内容表现有数字、BOOL值、字符串、NULL,我们先要编写这些基本的处理函数,然后再进行数据类型转换。

对于此,我们要思考:

如何判断将要处理的数据是字符串、数字、BOOL值、NULL值?以及对应的处理方法是什么?
我们可以将其拆分成一个个独立的函数去处理。

在上述问题的解决过程中,我们还要考虑到JSON的嵌套关系,当遇到"、,、{、}、[、]时,我们需要对其进行处理。

通过上述函数处理完一个JSON字符串之后,我们就可以得到一个个JSON节点,节点的结构中又将不同层级的数据组织起来。

而将JSON结构转换成字符串与上述思路相似,我们只需要将不同数据类型转换成字符串,然后将字符串拼接起来即可。

小结

介于篇幅,本文先对JSON的C实现做一下思想分析。

我们将会在后续的文章具体介绍如何使用C语言实现JSON的解析和转换。


http://www.mrgr.cn/news/38584.html

相关文章:

  • LeetCode讲解篇之33. 搜索旋转排序数组
  • 哈希知识点总结:哈希、哈希表、位图、布隆过滤器
  • DMA的原理
  • FPGA-Vivado-IP核-逻辑分析仪(ILA)
  • Linux 线程互斥
  • html5 + css3
  • Python精选200Tips:181-182
  • [leetcode]5_最长回文子串
  • AAMAS 24 | 基于深度强化学习的多智能体和自适应框架用于动态组合风险管理
  • 一文理解mysql 联合索引和各种SQL语句分析
  • Python语言语法基础篇
  • 微信小程序开发系列之-实战搭建一个简单的待办事项小程序
  • Time-MoE : 时间序列领域的亿级规模混合专家基础模型
  • UE学习篇ContentExample解读------Blueprints Advanced-下
  • Linux进程-2
  • 鸿蒙媒体开发系列12——音频输入设备管理(AudioRoutingManager)
  • 一篇文章了解【函数指针数组】
  • Linux Mint急救模式
  • Hashcat
  • 多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)