关于cJSON库,cJSON-创新互联

先了解一下cJSON_Parse(),函数原型如下

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了瀍河免费建站欢迎大家使用!
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);

函数作用:将一个符合json数据结构的字符串转换为cJSON结构体。

参数:

value:输入的字符串

返回值:如果解析正常,返回一个指向整个object的指针;如果解析失败,则返回NULL。

注意:cJSON_Parse()函数会在堆区开辟空间,因此使用完后要及时调用cJSON_Delete释放内存,防止内存泄漏问题

上代码

#include#include "cJSON.h"

int main(int argc, char const *argv[])
{
    char buf[512] = "111111qqq";
    printf("buf:%s\n",buf);
    cJSON* cjson = cJSON_Parse(buf);//将JSON字符串转换成JSON结构体
    if(cjson == NULL)//判断转换是否成功
    {
        printf("Error before: [%s]\n", cJSON_GetErrorPtr());
        return -1;
    }
    else
    {
        printf("cJSON错误%s\n",cJSON_Print(cjson));//打包成功调用cJSON_Print打印输出
    }
    cJSON_Delete(cjson);
    return 0;
}

——————————————————————————————————————————

在进行使用cJSON库解析json字符串时发现,如果只使用if(cjson == NULL)并不能判断以数字开头的字符串,函数返回值会保留字符串的数字部分7cafba33dae74682807b4e4ba4cb347a.png

此时如果继续去调用函数去反序列化json,由于格式不匹配,便会“段错误”;

目前想到的解决方式如下:

既然cJSON_Parse()函数无法完全判断,那就增加判断条件,我选用的的是使用cJSON_GetObjectItem()函数,判断一下键值对,该函数若查找的键没有对应值则会返回NULL;

json里面,键值对的值是可以为NULL的,因此选择键值对时需要注意;

#include#include "cJSON.h"

int main(int argc, char const *argv[])
{
    char buf[512] = "111111qqq";
    printf("buf:%s\n",buf);
    cJSON* cjson = cJSON_Parse(buf);//将JSON字符串转换成JSON结构体
    if(cjson == NULL)//判断转换是否成功
    {
        printf("Error before: [%s]\n", cJSON_GetErrorPtr());
        return -1;
    }
    else
    {
        if(cJSON_GetObjectItem(cjson, "uuid") == NULL)
        {
            printf("Error before: [%s]\n", cJSON_GetErrorPtr());
            return -1;
        }
        printf("cJSON错误%s\n",cJSON_Print(cjson));//打包成功调用cJSON_Print打印输出
    }
    cJSON_Delete(cjson);
    return 0;
}

12443b337a064c26ae2d111b359fe349.png

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页标题:关于cJSON库,cJSON-创新互联
标题URL:http://hbruida.cn/article/dehejc.html