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

ESP32上C语言实现JSON对象的创建和解析

在ESP32上使用C语言实现JSON对象的创建和解析,同样可以借助cJSON库。ESP-IDF(Espressif IoT Development Framework)本身已经集成了cJSON库,你可以直接使用。以下是详细的步骤和示例代码。

1. 创建一个新的ESP-IDF项目

首先,确保你已经安装了ESP-IDF开发环境。然后使用以下命令创建一个新的项目:

idf.py create-project esp32_json_example
cd esp32_json_example

2. 编写JSON对象创建代码

下面的代码展示了如何在ESP32上创建一个JSON对象并将其转换为字符串:

#include <stdio.h>
#include "cJSON.h"void app_main()
{// 创建一个JSON对象cJSON *root = cJSON_CreateObject();// 添加一个字符串字段cJSON_AddStringToObject(root, "name", "Alice");// 添加一个整数字段cJSON_AddNumberToObject(root, "age", 25);// 创建一个嵌套的JSON对象cJSON *contact = cJSON_CreateObject();cJSON_AddStringToObject(contact, "email", "alice@example.com");cJSON_AddStringToObject(contact, "phone", "+1234567890");// 将嵌套的JSON对象添加到根对象中cJSON_AddItemToObject(root, "contact", contact);// 将JSON对象转换为字符串char *json_string = cJSON_Print(root);if (json_string != NULL) {printf("Generated JSON: %s\n", json_string);cJSON_free(json_string);}// 释放JSON对象的内存cJSON_Delete(root);
}

代码解释:

  • 使用cJSON_CreateObject()创建一个根JSON对象。
  • 使用cJSON_AddStringToObject()cJSON_AddNumberToObject()向根对象中添加字符串和数字字段。
  • 创建一个嵌套的JSON对象contact,并向其中添加emailphone字段。
  • 将嵌套对象添加到根对象中。
  • 使用cJSON_Print()将JSON对象转换为字符串,并打印输出。
  • 最后,释放JSON字符串和JSON对象的内存。

3. 编写JSON对象解析代码

下面的代码展示了如何在ESP32上解析一个JSON字符串:

#include <stdio.h>
#include "cJSON.h"void app_main()
{const char *json_str = "{\"name\": \"Bob\", \"age\": 32, \"contact\": {\"email\": \"bob@example.com\", \"phone\": \"+0987654321\"}}";// 解析JSON字符串cJSON *root = cJSON_Parse(json_str);if (root == NULL) {const char *error_ptr = cJSON_GetErrorPtr();if (error_ptr != NULL) {fprintf(stderr, "Error before: %s\n", error_ptr);}return;}// 获取JSON字段的值cJSON *name = cJSON_GetObjectItemCaseSensitive(root, "name");cJSON *age = cJSON_GetObjectItemCaseSensitive(root, "age");cJSON *contact = cJSON_GetObjectItemCaseSensitive(root, "contact");if (cJSON_IsString(name) && cJSON_IsNumber(age) && cJSON_IsObject(contact)) {printf("Name: %s\n", name->valuestring);printf("Age: %d\n", age->valueint);cJSON *email = cJSON_GetObjectItemCaseSensitive(contact, "email");cJSON *phone = cJSON_GetObjectItemCaseSensitive(contact, "phone");if (cJSON_IsString(email) && cJSON_IsString(phone)) {printf("Contact:\n");printf("  Email: %s\n", email->valuestring);printf("  Phone: %s\n", phone->valuestring);}}// 释放JSON对象的内存cJSON_Delete(root);
}

代码解释:

  • 定义一个JSON字符串json_str
  • 使用cJSON_Parse()解析JSON字符串。
  • 使用cJSON_GetObjectItemCaseSensitive()获取JSON字段的值。
  • 检查字段的类型,并打印输出。
  • 最后,释放JSON对象的内存。

4. 编译和烧录

在项目目录下,使用以下命令编译和烧录代码:

idf.py set-target esp32
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor

请将/dev/ttyUSB0替换为你的ESP32设备对应的串口设备名称。

5. 注意事项

  • 在ESP32上使用cJSON时,要注意内存管理,避免内存泄漏。
  • 如果JSON数据较大,要确保有足够的内存来存储和处理。

通过以上步骤,你就可以在ESP32上实现JSON对象的创建和解析。

http://www.xdnf.cn/news/114607.html

相关文章:

  • 亚马逊英国站FBA费用重构:轻小商品迎红利期,跨境卖家如何抢占先机?
  • 动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
  • Visual Studio Code 使用tab键往左和往右缩进内容
  • 差分信号抗噪声原理:
  • 编译 C++ 报错“找不到 g++ 编译器”的终极解决方案(含 Windows/Linux/macOS)
  • MacOS上如何运行内网穿透详细教程
  • MySQL的图形管理工具-MySQL Workbench的下载安装及使用【保姆级】
  • 力扣 83 . 删除排序链表中的重复元素:深入解析与实现
  • [golang] 介绍 | 特点 | 应用场景
  • uniapp跨平台开发---switchTab:fail page `/undefined` is not found
  • P1217 [USACO1.5] 回文质数 Prime Palindromes【python】
  • Python - 爬虫-网页解析数据-库lxml(支持XPath)
  • 机器人新革命:Pi 0.5如何让智能走进千家万户
  • 解决yarn install 报错 error \node_modules\electron: Command failed.
  • 2025年3月电子学会青少年机器人技术(四级)等级考试试卷-实际操作
  • 【双指针】和为s的两个数字
  • STM32F407 HAL库使用 DMA_Normal 模式实现 UART 循环发送(无需中断)
  • Postman设置环境变量与Token
  • idea连接远程服务器kafka
  • 学习海康VisionMaster之顶点检测
  • Rust 数据类型
  • 【“星睿O6”AI PC开发套件评测】开箱+刷机+基础环境配置
  • wordpress学习笔记
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(二):使用4个文件实现MVC框架
  • 决策树在金融分析中有诸多应用场景
  • C语言——函数
  • 32BIT的SPI主机控制
  • 架构-系统工程与信息系统基础
  • 【Spring Boot】深入解析:#{} 和 ${}
  • java Springboot使用扣子Coze实现实时音频对话智能客服