如何在STM32CUBEIDE中使用和编写JSON语言
如何在STM32CUBEIDE中使用和编写JSON语言?我写的电动汽车充电器微控制器的代码,必须使用JSON格式与服务器通信如何在STM32CUBEIDE实现JSON格式的通信?
参考一下json的c语言实现库呗!
我常用的是cjson。但楼主一定要自己处理好内存使用的情况 cJSON —— 轻量、广泛使用、适合嵌入式系统 在资源受限的嵌入式系统中,注意内存使用量,避免频繁分配和释放。 从 GitHub 获取 cJSON 源文件 #include "cJSON.h"
#include <string.h>
void Generate_JSON(void) {
// 创建根对象
cJSON *root = cJSON_CreateObject();
// 添加键值对
cJSON_AddStringToObject(root, "device", "STM32F103");
cJSON_AddNumberToObject(root, "temperature", 25.5);
cJSON_AddBoolToObject(root, "status", 1); // true
// 创建嵌套对象(如传感器数据)
cJSON *sensor = cJSON_CreateObject();
cJSON_AddStringToObject(sensor, "type", "DHT11");
cJSON_AddNumberToObject(sensor, "humidity", 60);
cJSON_AddItemToObject(root, "sensor", sensor);
// 转换为JSON字符串
char *json_str = cJSON_Print(root); // 带格式化(易读)
// char *json_str = cJSON_PrintUnformatted(root); // 无格式化(节省空间)
// 通过串口发送(需提前初始化USART)
HAL_UART_Transmit(&huart1, (uint8_t *)json_str, strlen(json_str), HAL_MAX_DELAY);
// 释放内存
free(json_str); // cJSON_Print返回的字符串需手动释放
cJSON_Delete(root); // 释放整个JSON对象
} 下载cJSON库 使用在线工具(如JSONLint)验证格式是否正确。 void parse_json(const char *json_str)
{
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 *device = cJSON_GetObjectItemCaseSensitive(root, "device");
if (cJSON_IsObject(device)) {
cJSON *name = cJSON_GetObjectItemCaseSensitive(device, "name");
if (cJSON_IsString(name) && (name->valuestring != NULL)) {
printf("Device Name: %s\n", name->valuestring);
}
cJSON *clock = cJSON_GetObjectItemCaseSensitive(device, "clock");
if (cJSON_IsObject(clock)) {
cJSON *frequency = cJSON_GetObjectItemCaseSensitive(clock, "frequency");
if (cJSON_IsNumber(frequency)) {
printf("Clock Frequency: %d Hz\n", frequency->valueint);
}
cJSON *source = cJSON_GetObjectItemCaseSensitive(clock, "source");
if (cJSON_IsString(source) && (source->valuestring != NULL)) {
printf("Clock Source: %s\n", source->valuestring);
}
}
}
// 释放JSON对象
cJSON_Delete(root);
} 将 cJSON 或其他库加入项目源码中 在项目中引入第三方 C 语言 JSON 库来处理 JSON 数据。 将cJSON源文件(cjson.c和cjson.h)添加到你的项目中 常用的库有cJSON和jansson。 使用第三方库 使用轻量级开源 JSON 库 JSON解析/生成可能占用较多内存 使用 cJSON 解析 JSON 字符串 cJSON库动态分配内存,使用后需通过cJSON_Delete释放内存,避免内存泄漏。 cJSON库在处理大JSON数据时可能占用较多资源,建议根据实际需求优化JSON数据结构。 推荐使用轻量级C语言库cJSON
页:
[1]