• cJSON笔记


    github地址:  https://github.com/DaveGamble/cJSON

    需要将cJSON.h 和 cJSON.c拷贝到路径下,并且连接所需库文件 -lm

    步骤:
    1、先将普通的json串处理成json对象,也就是所谓的创建json root的过程
    char *js_string;
    cJSON *root;
    root = cJSON_Parse(js_string);
    注意:
    解析完成后,需释放
    if(root)
        cJSON_Delete(root);
        
    2、开始拿关键字,但如果关键字还有父层或者祖层,那就需要先从父层开拿,所谓剥洋葱是也!
    先说没有父层的:
    {"name": "xiaohong", "age": 10}
    可以这样搞:
    char *s = "{"name":"xiao hong","age":10}";
    cJSON *root = cJSON_Parse(s);

    cJSON *name = cJSON_GetObjectItem(root, "name");
    printf("name type is %d ", name->type);
    printf("name is %s ", name->valuestring);

    cJSON *age = cJSON_GetObjectItem(root, "age");
    printf("age type is %d ", age->type);
    printf("age is %d ", age->valueint);

    再说有父层的:
    {"list":{"name":"xiao hong",
             "age":10},
      "other":{"name":"hua hua"}}

    char *s = "{"list":{"name":"xiao hong","age":10},"other":{"name":"hua hua"}}";
    cJSON *root = cJSON_Parse(s);
    cJSON *js_list=cJSON_GetObjectItem(root, "list");
    printf("list type is %d ",js_list->type);
    cJSON *name = cJSON_GetObjectItem(js_list, "name");
    printf("name type is %d ",name->type);
    printf("name is %s ",name->valuestring);
    cJSON *age = cJSON_GetObjectItem(js_list, "age");
    printf("age type is %d ", age->type);
    printf("age is %d ",age->valueint);
    cJSON *js_other = cJSON_GetObjectItem(root, "other");
    printf("list type is %d ",js_other->type);
    cJSON *js_name = cJSON_GetObjectItem(js_other, "name");
    printf("name type is %d ",js_name->type);
    printf("name is %s ",js_name->valuestring);

    if(root)
        cJSON_Delete(root);
    return 0;

    3、数组
    char *s = "{"list":["name1","name2"]}";
    cJSON *root = cJSON_Parse(s);
    cJSON *js_list = cJSON_GetObjectItem(root, "list");
    int array_size = cJSON_GetArraySize(js_list);
    int i = 0;
    cJSON *item;
    for(i=0; i< array_size; i++) {
        item = cJSON_GetArrayItem(js_list, i);
        printf("item type is %d ",item->type);
        printf("%s ",item->valuestring);
    }

    ---------------------------------------------
    常用API(在文件cJSON.h中)
    --解析json
    1、从给定的json字符串中得到cjson对象
    extern cJSON *cJSON_Parse(const char *value);

    2、从json对象中获取有格式的json对象
    extern char *cJSON_Print(cJSON *item);

    3、从cjson中获取无格式的json对象
    extern char *cJSON_PrintUnformatted(cJSON *item);

    4、删除cjson对象,释放链表所占用的内存空间
    extern void cJSON_Delete(cJSON *c);

    5、获取cjson对象数组成员的个数
    extern int cJSON_GetArraySize(cJSON *array);

    6、根据下标获取cjson对象数组中的对象
    extern cJSON_GetArrayItem(cJSON *array, int item);

    7、根据键获取对应的值(cjson对象)
    extern cJSON *cJSON_GetObjectItem(cJSON *object, const char *string);

    8、获取错误字符串
    extern const char *cJSON_GetErrorPtr(void);

    --构造json
    extern cJSON *cJSON_CreateObject(void);
    extern void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
    extern cJSON *cJSON_CreateNull(void);
    extern cJSON *cJSON_CreatTrue(void);
    extern cJSON *cJSON_createFalse(void);
    extern cJSON *cJSON_CreateBool(int b);
    extern cJSON *cJSON_CreateNumber(double num);
    extern cJSON *cJSON_CreateString(const char *string);
    extern cJSON *cJSON_CreateArray(void);
    extern cJSON *cJSON_CreateObject(void);

     

  • 相关阅读:
    Google是不是真的不能用了?非常奇怪的问题
    九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题
    UNIX网络编程卷1 时间获取程序server TCP 协议相关性
    uva 1557
    C经典之14-双向链表存储1-10---ShinePans
    Java 内部类
    HiPAC高性能规则匹配算法之查找过程
    Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】
    NSRange,判断字符串的各种操作~
    NSRange类详解
  • 原文地址:https://www.cnblogs.com/rohens-hbg/p/10827507.html
Copyright © 2020-2023  润新知