乐鑫技术交流
直播中

刘辉

7年用户 1101经验值
私信 关注
[问答]

使用CJSON创建数字是一直是显示0,为什么?

在使用CJSON创建字符没有问题,但是创建数字是一直是显示0,代码如下:

        /*
         * Create a json format data
         */
        root = cJSON_CreateObject();
        if (root == NULL) {
                os_printf("cJson create obj error!!n");
                vTaskDelete(NULL);
                return;
        }
        cJSON_AddStringToObject(root,"msg_type","notify");

        services = cJSON_CreateObject();
        if (services == NULL) {
                os_printf("cjson create services error!!n");
                vTaskDelete(NULL);
                cJSON_Delete(root);
                return;
        }

        cJSON_AddItemToObject(root,"services",services);

        ops = cJSON_CreateObject();
        if (ops == NULL) {
                os_printf("cjson create ops error!!n");
                vTaskDelete(NULL);
                cJSON_Delete(root);
                cJSON_Delete(services);

                return;
        }

        cJSON_AddItemToObject(services,"operation_status",ops);
        cJSON_AddNumberToObject(ops,"status",1L);
      
        li = cJSON_CreateObject();
        if (li == NULL) {
                os_printf("cjson create ops error!!n");
                vTaskDelete(NULL);
                cJSON_Delete(root);
                cJSON_Delete(services);

                cJSON_Delete(li);

                return;
        }
        cJSON_AddItemToObject(services,"lightbulb",li);
        cJSON_AddNumberToObject(li,"alpha",122L);
        cJSON_AddNumberToObject(li,"color_rgb",122L);
        cJSON_AddNumberToObject(li,"color_hsl",122L);
      

        jsonStr = cJSON_Print(root);
      
        os_printf("json data = %sn",jsonStr);


        打印结果如下:
json data = {
        "msg_type":        "notify",
        "services":        {
                "operation_status":        {
                        "status":        0
                },
                "lightbulb":        {
                        "alpha":        0,
                        "color_rgb":        0,
                        "color_hsl":        0
                }
        }
}


数字全部是0,请问这是怎么回事?用的SDK是ESP8266_RTOS_SDK-master.zip,是2016/2/20下载的

回帖(1)

刘艳

2024-7-22 17:03:19
从您提供的代码片段来看,您正在使用CJSON库创建一个JSON对象。然而,您没有展示如何添加数字类型的数据。让我们一步一步地分析问题并找出解决方案。

1. 首先,确保您已经正确地包含了CJSON库的头文件:

```c
#include "cJSON.h"
```

2. 接下来,创建一个JSON对象:

```c
cJSON *root = cJSON_CreateObject();
if (root == NULL) {
    os_printf("cJson create obj error!!n");
}
```

3. 现在,我们需要添加一个数字类型的数据。使用`cJSON_AddNumberToObject()`函数来添加数字:

```c
cJSON *number_item = cJSON_CreateNumber(123); // 创建一个数字类型的JSON项,值为123
if (cJSON_AddItemToObject(root, "number_key", number_item) == NULL) {
    os_printf("Failed to add number item to the JSON objectn");
}
```

4. 打印JSON对象,以确保数字已正确添加:

```c
const char *json_string = cJSON_Print(root);
os_printf("JSON string: %sn", json_string);
cJSON_free(json_string);
```

5. 最后,释放JSON对象:

```c
cJSON_Delete(root);
```

将以上代码片段整合到您的项目中,您应该能够看到数字类型的数据被正确添加到JSON对象中。如果您仍然遇到问题,请检查CJSON库是否已正确安装和链接到您的项目中。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分