cJSON介绍-cJSON_AddStringToObject()

cJSON_AddStringToObject 介绍

cJSON_AddStringToObject 的函数原型:

cJSON *cJSON_AddStringToObject(cJSON *object, const char *name, const char *string);

**作用:**向 object 添加一个键值对,键为 name,值为 string(类型为字符串)。
**返回值:**成功返回新创建的 cJSON 对象,失败返回 NULL。
深拷贝行为:
string 不会 直接存储指针,而是 会复制(深拷贝)字符串内容。
内部使用 strdup 复制 string,并由 cJSON_Delete 统一管理内存。
示例:

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"

int main() {
    cJSON *root = cJSON_CreateObject();
    char *original_str = "Hello, cJSON!";

    cJSON_AddStringToObject(root, "greeting", original_str);

    char *json_str = cJSON_Print(root);
    printf("%s\n", json_str);

    // 释放 JSON 对象
    cJSON_Delete(root);
    free(json_str);

    return 0;
}

输出:
使用的是cJSON_Print格式化,所以输出的是json格式的,如果要输出字符串,使用cJSON_PrintUnformatted

{
    "greeting": "Hello, cJSON!"
}
#include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" #include "./SYSTEM/delay/delay.h" //#include "./BSP/LED/led.h" //#include "./USMART/usmart.h" //#include "./BSP/KEY/key.h" #include "./BSP/SRAM/sram.h" #include "./MALLOC/malloc.h" #include "freertos_demo.h" //#include "./BSP/RS485/rs485.h" //#include "./BSP/MODBUS_MASTER/master.h" #include "cJSON.h" //#include "test.c" #include <stdio.h> #include <stdlib.h> #include "FreeRTOS.h" int main (int argc, const char * argv[]) { // int i=0; HAL_Init(); /* 初始化HAL库 */ sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */ delay_init(168); usart_init(115200); /* 延时初始化 */ char* response_str = NULL; cJSON* main_root = cJSON_CreateObject(); cJSON_AddStringToObject(main_root, "IP", "192.168.1.44"); cJSON* main_m_root=cJSON_CreateArray(); cJSON_AddItemToObject(main_root,"data",main_m_root); //温度 1 cJSON* obj1=cJSON_CreateObject(); cJSON_AddItemToArray(main_m_root,obj1); cJSON_AddStringToObject(obj1, "channel", "1"); cJSON_AddStringToObject(obj1, "type", "4"); cJSON* se1_root=cJSON_CreateObject(); cJSON_AddStringToObject(se1_root, "statue", "1"); cJSON_AddStringToObject(se1_root, "value", "4"); cJSON_AddItemToObject(obj1, "info", se1_root); //湿度 2 cJSON* obj2=cJSON_CreateObject(); cJSON_AddItemToArray(main_m_root,obj2); cJSON_AddStringToObject(obj2, "channel", "2"); cJSON_AddStringToObject(obj2, "type", "5"); cJSON* se2_root=cJSON_CreateObject(); cJSON_AddStringToObject(se2_root, "statue", "1"); cJSON_AddStringToObject(se2_root, "value", "4"); cJSON_AddItemToObject(obj2, "info", se2_root); //噪音 3 cJSON* obj3=cJSON_CreateObject(); cJSON_AddItemToArray(main_m_root,obj3); cJSON_AddStringToObject(obj3, "channel", "3"); cJSON_AddStringToObject(obj3, "type", "9"); cJSON* se3_root=cJSON_CreateObject(); cJSON_AddStringToObject(se3_root, "statue", "1"); cJSON_AddStringToObject(se3_root, "value", "4"); cJSON_AddItemToObject(obj3, "info", se3_root); //烟感 4 cJSON* obj4=cJSON_CreateObject(); cJSON_AddItemToArray(main_m_root,obj4); cJSON_AddStringToObject(obj4, "channel", "4"); cJSON_AddStringToObject(obj4, "type", "1"); cJSON* se4_root=cJSON_CreateObject(); cJSON_AddStringToObject(se4_root, "statue", "1"); cJSON_AddStringToObject(se4_root, "value", "4"); cJSON_AddItemToObject(obj4, "info", se4_root); //红外报警 5 cJSON* obj5=cJSON_CreateObject(); cJSON_AddItemToArray(main_m_root,obj5); cJSON_AddStringToObject(obj5, "channel", "5"); cJSON_AddStringToObject(obj5, "type", "6"); cJSON* se5_root=cJSON_CreateObject(); cJSON_AddStringToObject(se5_root, "statue", "1"); cJSON_AddStringToObject(se5_root, "value", "4"); cJSON_AddItemToObject(obj5, "info", se5_root); //空开网关 6 cJSON* obj6=cJSON_CreateObject(); cJSON_AddItemToArray(main_m_root,obj6); cJSON_AddStringToObject(obj6, "channel", "6"); cJSON_AddStringToObject(obj6, "type", "8"); cJSON_AddStringToObject(obj6, "value", ""); cJSON* th_root=cJSON_CreateArray(); cJSON_AddItemToObject(obj6,"airinfo",th_root); cJSON* obj6_1=cJSON_CreateObject(); cJSON_AddItemToArray(th_root,obj6_1); cJSON_AddStringToObject(obj6_1, "channel", "1"); cJSON_AddStringToObject(obj6_1, "voltage", "380"); cJSON_AddStringToObject(obj6_1, "leakage", "1"); cJSON_AddStringToObject(obj6_1, "power", "380"); cJSON_AddStringToObject(obj6_1, "temperature", "30"); cJSON_AddStringToObject(obj6_1, "electric", "500"); cJSON_AddStringToObject(obj6_1, "electric", "3520"); cJSON_AddStringToObject(obj6_1, "disjunctor", "1"); cJSON* obj6_1_param=cJSON_CreateObject(); //a cJSON* obj6_1_param_a=cJSON_CreateObject(); cJSON_AddStringToObject(obj6_1_param_a, "voltage", "220"); cJSON_AddStringToObject(obj6_1_param_a, "power", "200"); cJSON_AddStringToObject(obj6_1_param_a, "temperature", "31"); cJSON_AddStringToObject(obj6_1_param_a, "electric", "450"); cJSON_AddItemToObject(obj6_1_param, "a", obj6_1_param_a); //b cJSON* obj6_1_param_b=cJSON_CreateObject(); cJSON_AddStringToObject(obj6_1_param_b, "voltage", "220"); cJSON_AddStringToObject(obj6_1_param_b, "power", "200"); cJSON_AddStringToObject(obj6_1_param_b, "temperature", "31"); cJSON_AddStringToObject(obj6_1_param_b, "electric", "450"); cJSON_AddItemToObject(obj6_1_param, "b", obj6_1_param_b); //c cJSON* obj6_1_param_c=cJSON_CreateObject(); cJSON_AddStringToObject(obj6_1_param_c, "voltage", "220"); cJSON_AddStringToObject(obj6_1_param_c, "power", "200"); cJSON_AddStringToObject(obj6_1_param_c, "temperature", "31"); cJSON_AddStringToObject(obj6_1_param_c, "electric", "450"); cJSON_AddItemToObject(obj6_1_param, "c", obj6_1_param_c); cJSON_AddItemToObject(obj6_1, "param", obj6_1_param); while (1) { printf("Free heap size: %d\n", xPortGetFreeHeapSize()); if (main_root == NULL) { printf("Failed to allocate memory for cJSON object.\n"); continue; } // response_str= cJSON_PrintBuffered(main_root, 2048, 1); // 预分配512字节 response_str= cJSON_Print(main_root); // 预分配512字节 if (response_str == NULL) { printf("Failed to print JSON string.\n"); cJSON_Delete(main_root); continue; } response_str = cJSON_Print(main_root); printf("%s\n",response_str); free(response_str); printf("Free heap size: %d\n", xPortGetFreeHeapSize()); } // return 0; } //———————————————— 执行一遍后输出Failed to print JSON string.如何解决?
最新发布
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值