JSON入门(基于ESP-IDF)

主要参考资料:

ESP32学习笔记(12)------JSON接口使用: https://blog.csdn.net/qq_36347513/article/details/116481167

目录

  • [1. JSON简介](#1. JSON简介)
    • [1.1 JSON 语法规则](#1.1 JSON 语法规则)
    • [1.2 JSON 键/值对](#1.2 JSON 键/值对)
  • [2. 添加cJSON](#2. 添加cJSON)
  • [4. 解析JSON数据](#4. 解析JSON数据)
    • [4.1 判断是否为JSON](#4.1 判断是否为JSON)
    • [4.2 解析数据](#4.2 解析数据)
      • [4.2.1 解析字符串类型数据](#4.2.1 解析字符串类型数据)
      • [4.2.2 解析整型数组数据](#4.2.2 解析整型数组数据)
    • [4.3 释放内存](#4.3 释放内存)

1. JSON简介

JSON (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

1.1 JSON 语法规则

在 JS 语言中,一切都是对象。 因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、数组等。但是对象和数组是比较特殊且常用的两种类型。

JSON的语法规则有:

  1. 对象表示为键值对
  2. 数据由逗号分隔
  3. 花括号保存对象
  4. 方括号保存数组

1.2 JSON 键/值对

JSON 键值对是用来保存 JS 对象的一种方式,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值。如:

{"firstName": "Json"}

2. 添加cJSON

文件位于 esp-idf\components\json\cJSON

使用时包含头文件 cJSON.h

c 复制代码
#include "cJSON.h"

4. 解析JSON数据

流程:判断JSON格式 --> 解析数据 --> 释放内存

4.1 判断是否为JSON

cpp 复制代码
// receiveData是要剖析的数据
//首先整体判断是否为一个json格式的数据
cJSON *pJsonRoot = cJSON_Parse(receiveData);
//如果是否json格式数据
if (pJsonRoot !=NULL)
{
    ···
}

4.2 解析数据

4.2.1 解析字符串类型数据

cpp 复制代码
char bssid[23] = {0};
cJSON *pMacAdress = cJSON_GetObjectItem(pJsonRoot, "mac");    // 解析mac字段字符串内容
if (!pMacAdress) return;                                      // 判断mac字段是否json格式
else
{
    if (cJSON_IsString(pMacAdress))                           // 判断mac字段是否string类型
    {
        strcpy(bssid, pMacAdress->valuestring);               // 拷贝内容到字符串数组
    }
}

4.2.2 解析整型数组数据

cpp 复制代码
cJSON *pArry = cJSON_GetObjectItem(pJsonRoot, "hex");        // 解析hex字段数组内容
if (!pArry) return;                                          // 判断hex字段是否json格式
else
{
    int arryLength = cJSON_GetArraySize(pArry);              // 获取数组长度
    int i;
    for (i = 0; i < arryLength; i++)
    {                                                        // 打印数组内容
        os_printf("cJSON_GetArrayItem(pArry, %d)= %d\n",i,cJSON_GetArrayItem(pArry, i)->valueint);        
    }
}

4.3 释放内存

cpp 复制代码
cJSON_Delete(pJsonRoot);                                      // 释放cJSON_Parse()分配出来的内存空间
相关推荐
Fcy64837 分钟前
Linux下 进程(二)(进程状态、僵尸进程和孤儿进程)
linux·运维·服务器·僵尸进程·孤儿进程·进程状态
ID_1800790547340 分钟前
Python结合淘宝关键词API进行商品价格监控与预警
服务器·数据库·python
落笔画忧愁e1 小时前
腾讯云轻量服务器 + OpenClaw 部署全攻略:从购买到飞书接入
服务器·飞书·腾讯云
第七序章1 小时前
【Linux学习笔记】初识Linux —— 理解gcc编译器
linux·运维·服务器·开发语言·人工智能·笔记·学习
AI科技星1 小时前
从ZUFT光速螺旋运动求导推出自然常数e
服务器·人工智能·线性代数·算法·矩阵
迎仔1 小时前
A-总览:GPU驱动运维系列总览
linux·运维
AI_56781 小时前
阿里云OSS成本优化:生命周期规则+分层存储省70%
运维·数据库·人工智能·ai
choke2331 小时前
软件测试任务测试
服务器·数据库·sqlserver
yyy的学习记录1 小时前
Ubuntu下urdf模型转换成proto模型
linux·运维·ubuntu
猫头虎1 小时前
OpenClaw开源汉化发行版:介绍、下载、安装、配置教程
运维·windows·开源·aigc·ai编程·agi·csdn