注意一定要在STM32CubeMX中,将Heap_Size 改为 0x2000,不然json键值大概只有两个,超过将在转化成字符串时失败!!
//=============================================================数据解析
(一),添加库:
#include "cJSON.h"
(二),解析函数(这里解析浮点类型)
void Json_Display(char *json_string)
{
cJSON *parsed_json = cJSON_Parse(json_string);
if (parsed_json == NULL) // 解析失败处理
{
const char *error_ptr = cJSON_GetErrorPtr();
if (error_ptr != NULL)
{
printf("Parse error before: %s\n", error_ptr);
}
return;
}
//解析出latitude
cJSON *latitude = cJSON_GetObjectItem(parsed_json, "latitude");
if(latitude != NULL && cJSON_IsNumber(latitude))
{
// 使用 cJSON_GetNumberValue 获取浮点数值
double lat_value = cJSON_GetNumberValue(latitude);
printf("latitude: %.6f\n", lat_value); // 输出小数部分
}
//解析出longitude
cJSON *longitude = cJSON_GetObjectItem(parsed_json, "longitude");
if (longitude != NULL && cJSON_IsNumber(longitude))
{
double lon_value = cJSON_GetNumberValue(longitude);
printf("longitude: %.6f\n", lon_value); // 输出小数部分
}
// 释放解析后的 JSON 对象
cJSON_Delete(parsed_json);
}
//======================================================================打包
(一),创建Json对象
cJSON *pOrder = cJSON_CreateObject();
cJSON *params = cJSON_CreateObject();
(二),判断是否创建失败
if (pOrder == NULL || params == NULL)
{
printf("Creat ENV JSONobj Err\n");
cJSON_Delete(pOrder);
cJSON_Delete(params);
return;
}
(三),添加数据
// 添加参数到params对象,并检查每个调用的返回值
if(!cJSON_AddNumberToObject(params,"temp",23.5)||!cJSON_AddNumberToObject(params,"humi",50)||!cJSON_AddNumberToObject(params,"o2",21))
{
printf("Add ENV data to JSONobj Err\n");
cJSON_Delete(pOrder);
cJSON_Delete(params);
return;
}
// 添加params到pOrder对象
cJSON_AddStringToObject(pOrder, "name", "environment");
cJSON_AddNumberToObject(pOrder, "id", 1);
cJSON_AddItemToObject(pOrder, "params", params);//pOrder包含params
char *json_body = NULL;
json_body = cJSON_PrintUnformatted(pOrder);
(四),转化成字符串并打印
// 转换JSON对象为字符串
if (json_body == NULL)
{
printf("Print ENV JSON Err\n");
cJSON_Delete(pOrder);
return;
}
// 打印并发送JSON字符串
printf("%s\n", json_body);
//使用 cJSON_free() 和 cJSON_Delete() 的目的是确保我们正确地释放这些动态分配的内存,以避免内存泄漏导致程序崩溃!!
cJSON_free(json_body);
cJSON_Delete(pOrder);