cJson 学习笔记——cJson讲解

本文介绍了轻量级 JSON 解析库 cJSON,详细阐述了 JSON 的基本概念,包括对象、数组、键值对等。并提供 cJSON 的使用教程,包括如何反序列化 JSON 字符串,序列化 cJSON 结构体,以及如何处理嵌套结构。教程通过实例代码展示操作过程,适合学习者参考。
摘要由CSDN通过智能技术生成

目录

一、前言

二、JSON 简介

1.1 什么是 JSON

1.2 JSON 结构

1.3 JSON 对象

1.4 JSON 数组

1.5 JSON 值

三、cJSON 使用教程

3.1 cJSON 使用说明

3.2 cJSON structure

3.3 反序列化 JSON 字符串

3.4 序列化 cJSON 结构体


一、前言

思考这么一个问题:对于不同的设备如何进行数据交换?可以考虑使用轻量级别的 JSON 格式。

那么需要我们手写一个 JSON 解析器吗?这大可不必,因为已经有前辈提供了开源的轻量级的 JSON 解析器——cJSON。我们会用就可以了,当然你也可以深入源码进行学习。

下图则向我们展示了如何通过 cJSON 实现 Client 与 Server 的数据交换:

 

  • Client 在发送数据之前,通过 cJSON 将自己的专属数据格式 Data_ClientFormat 转化为了通用格式 JSON
  • 服务端在收到 JSON 数据后,通过 cJSON 将其转化为服务端的专属数据格式 Data_ServerFormat
  • 反之同理

在介绍 cJSON 之前,先来对 JSON 这个数据格式有个简单了解。

二、JSON 简介

1.1 什么是 JSON

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)。但它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据交换格式

1.2 JSON 结构

JSON 的两种数据结构:

  1. 对象:A collection of key/value pairs(一个无序的 key / value 对的集合)
  2. 数组:An ordered list of values(一 / 多个 value 的有序列表)

从上述描述中,我们可以获得如下四种信息:

  • 对象(Object)
  • 数组(Array)
  • 键(key)
  • 值(Value)

1.3 JSON 对象

JSON 对象具体格式如下图所示:

 

  • 一个对象以{ 开始,以}结束,是若干「key / value 对」的集合
  • key 和 value 使用:分隔
  • key / value 对之间使用,分隔

注意事项:

  1. 键:必须是 string 类型
  2. 值:可以是合法的 JSON 数据类型(字符串、数值、对象、数组、布尔值或 null)

如,这是一个合法的 JSON 对象:

{
    "name" : "张三"
}

这也是一个合法的 JSON 对象:

{
    "name" : "张三",
    "age"  : 18,
    "sex"  : "男"
}

1.4 JSON 数组

JSON 数组具体格式如下图所示:

 

  • 一个数组以[开始,]结束,是若干 value 的有序集合
  • 多个 value 以,分隔

如,这是一个合法的 JSON 数组:

[
    "张三",
    18,
    "男"
]

这也是一个合法的 JSON 数组:

[
    {
        "name"	: "张三",
        "age"	: 18,
        "sex"	: "男"
    },
    {
        "name"	: "李四",
        "age"	: 19,
        "sex"	: "男"
    }
]

1.5 JSON 值

值(value)可以是:

  • 字符串:必须用双引号括起来
  • 数 值:十进制整数或浮点数
  • 对 象:键 / 值对的集合
  • 数 组:值的集合
  • 布尔值:true 或 false
  • null

value 可以是简单的用双引号引起来的 string 串,也可以是一个数值;或布尔值(true or false),或 null。

当然也可以是复杂的 object 或 array,这些取值是可以嵌套的。

 

在「1.4 JSON 数组」中,第二个例子就是一个嵌套的举例,当然也可以这么嵌套:

{
    "class_name"	: "计科一班",
    "student_num"	: 2,
    "student_info"	: 
    [
        {
            "name"	: "张三",
            "age"	: 18,
            "sex"	: "男"
        },
        {
            "name"	: "李四",
            "age"	: 19,
            "sex"	: "男"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_57781768

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值