美文网首页
2020-01-08 cJSON使用

2020-01-08 cJSON使用

作者: 14cat | 来源:发表于2020-01-08 21:24 被阅读0次

[TOC]

cJSON 库只有 cJSON.c、cJSON.h 这两个文件,非常方便引入到项目中,而其中的方法也非常简单,看看头文件,自己写个例子测试一下,基本就可以满足日常工作需求了

0. 看代码回忆

存入和取出

int main()
{
    char *str_arr = NULL;
    char *str_obj = NULL;

    // ================= JSON 对象转换为字符串 =================
    // 创建 JSON 数组
    cJSON *json_arr = cJSON_CreateArray();

    // 创建 JSON 对象
    cJSON *json_obj = cJSON_CreateObject();

    // 解析后用来存放的 JSON
    cJSON *json_arr_parse = NULL;
    cJSON *json_obj_parse = NULL;
    cJSON *json_item_parse = NULL;

    // 向 JSON 对象中添加键值对内容
    cJSON_AddStringToObject(json_obj, "key01", "value01");
    cJSON_AddNumberToObject(json_obj, "key02", 2);
    cJSON_AddBoolToObject(json_obj, "key03", true);
    cJSON_AddTrueToObject(json_obj, "key04");
    cJSON_AddFalseToObject(json_obj, "key05");
    cJSON_AddNullToObject(json_obj, "key06");


    // 将 JSON 对象添加到 JSON 数组中
    cJSON_AddItemToArray(json_arr, json_obj);

    // 将 JSON 对象的内容格式化后存入字符串中
    str_obj = cJSON_Print(json_obj);
    printf("str_obj:%s\n", str_obj);

    // 将 JSON 数组的内容格式化后存入字符串中
    str_arr = cJSON_Print(json_arr);
    printf("str_arr:%s\n", str_arr);

    // 根据key修改值
    cJSON_ReplaceItemInObject(json_obj, "key01", cJSON_CreateString("666666"));
    // 不能这么修改,类型不一致
    //cJSON_ReplaceItemInObject(json_obj, "key05", cJSON_CreateString("666666"));
    str_arr = cJSON_Print(json_arr);
    printf("str_arr:%s\n", str_arr);


    // ================= 字符串解析为 JSON 对象 =================
    json_arr_parse = cJSON_Parse((const char *)str_arr);
    
    // 从 json 数组中取值
    json_obj_parse = cJSON_GetArrayItem(json_arr_parse, 0);

    // 从 json 对象中取值
    json_item_parse = cJSON_GetObjectItem(json_obj_parse, "key02");

    printf("json-key:%s\n", json_item_parse->string);
    printf("json-type:%d\n", json_item_parse->type);

    /* */
    switch (json_obj_parse->type) {
        case 1: // false
            printf("false\n");
            break;
        case 2: // true
            printf("true\n");
            break;
        case 4:// null
            printf("null\n");
            break;
        case 8: // int
            printf("int\n");
        case 16:    // 字符串
            printf("string\n");
            break;
        case 32:    // 数组
            printf("array\n");
            break;
        case 64:    // 对象
            printf("object\n");
            break;
    } 
    printf("json-value:%s\n", json_item_parse->valuestring);

 

    // 释放 JSON 对象,可以释放整个内存
    cJSON_Delete(json_arr);

    return 0;
}

1. cJSON 的结构体

typedef struct cJSON {

    struct cJSON *next,*prev;       /* 遍历数组或对象链的前向或后向链表指针*/

    struct cJSON *child;            /*数组或对象的孩子节点*/

    int type;                       /* key的类型*/

    char *valuestring;              /*字符串值*/

    int valueint;                   /* 整数值*/

    double valuedouble;             /* 浮点数值*/

    char *string;                   /* key的名字*/

} cJSON;

2. cJSON 的修改对应值

看了头文件和几篇文件都没有找到修改对应值方法,于是找源码发现了这一段

#define cJSON_AddStringToObject(object,name,s)  cJSON_AddItemToObject(object, name, cJSON_CreateString(s))

cJSON *cJSON_CreateString(const char *string)   {
    cJSON *item=cJSON_New_Item();
    if(item){
        item->type=cJSON_String;
        item->valuestring=cJSON_strdup(string);
    }
    return item;
}

实际上文字不是直接填入 cJSON 中,而是通过将值包裹到 cJSON 的 item 中,所以我使用这个方法自己创造一个 cJSON 对象进行替换就能达到替换值

cJSON_ReplaceItemInObject(json_obj, "key01", cJSON_CreateString("666666"));

参考资料

参考资料
cJSON:简单好用的C语言JSON库

C语言cJSON库的使用,解析json数据格式

cJSON库的简单介绍及使用

相关文章

  • 2020-01-08 cJSON使用

    [TOC] cJSON 库只有 cJSON.c、cJSON.h 这两个文件,非常方便引入到项目中,而其中的方法也非...

  • cJSON使用(一)

    目录 cJSON使用(一)cJSON使用(二) cJSON介绍 cJSON是一个超轻巧,携带方便,单文件,简单的可...

  • 解决方法:STM32使用cJSON解析数据失败

    一、问题 在 STM32 移植 cJSON 库后,使用 cJSON_Parse(),解析失败。 使用 cJSON_...

  • CJSON使用

    项目地址:https://github.com/DaveGamble/cJSON 数据封装 #include #i...

  • cJson使用案例

    Output

  • cJSON库使用

    cJSON安装 在Linux下,使用下面命令下载源码git clone https://github.com/D...

  • cJSON的使用

    root = cJSON_CreateArray();//创建一个数组 展示结果: struct cJSON* s...

  • 利用cJSON解析和创建JSON字符串

    一、前言:为了使用简单方便,可以通过下载cJSON文件来解析JOSN字符串比较简单方便,而且cJSON文件只有一个...

  • cjson库的使用

    现在很流行json格式,现在项目中所有数据相关的格式也是用的这个,因为是c++开发,这就涉及到一个问题,C++中如...

  • OpenResty(Lua)笔记总结一

    json 解 析 的 异 常 捕 获 local cjson = require "cjson"local j...

网友评论

      本文标题:2020-01-08 cJSON使用

      本文链接:https://www.haomeiwen.com/subject/lhxeactx.html