主要参考资料:
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 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()分配出来的内存空间