【cjson】CJSON库使用

CJSON读取使用

1.查看json文件大小

   	char *cfg_file = "./aaa.json"
	struct stat json_size;
    stat(cfg_file, &json_size); 
    FILE *json_fd = fopen(cfg_file, "r");
    if(NULL == json_fd){
        printf("%s open fail\n", cfg_file);
        return -1;
    }

2.json文件读取到堆区

    char *json_buf = malloc(json_size.st_size + 1);
    memset(json_buf, 0, sizeof(json_buf));
    fread(json_buf, json_size.st_size, 1, json_fd);
    fclose(json_fd);

3.解析json

	CJSON *root = cJSON_Parse(json_buf);

4.查询对象

	CJSON *cjson_Item = cJSON_GetObjectItem(root, "name");//查询"name"对象后的内容
	if(NULL == cjson_Item){
        printf("not find ");
        return -1;
    }

通过返回的CJSON *值针可以查看查询到的内容

CJSON结构体成员存储的类型
cjson_Item->valuestring字符串 %s
cjson_Item->valueint整形 %d
cjson_Item->valuedouble浮点数 %f

5.查询数组成员

    CJSON *cjson_arry = cJSON_GetObjectItem(root, "work_path");
    if(NULL == cjson_arry){
        printf("not find\n");
        return -1;
    }
    int array_size = cJSON_GetArraySize(cjson_arry);
	CJSON *cjson_arry_item;
    for(i = 0; i < array_size; i++){
        cjson_arry_item = cJSON_GetArrayItem(cjson_arry, i);
        printf("cjson_arry_item :%s \n",cjson_arry_item->valuestring );
    }

6.销毁解析内容

	cJSON_Delete(root);

创建CJSON

代码示例

#include <stdio.h>
#include <malloc.h>
#include <stdio.h>
#include <string.h>

#include "cJSON.h"
int main(void)
{
    cJSON *cjson_test = NULL;
    cJSON *cjson_address = NULL;
    cJSON *cjson_skill = NULL;
    char *str = NULL;

    /* 创建一个JSON数据对象(链表头结点) */
    cjson_test = cJSON_CreateObject();

    /* 添加一条字符串类型的JSON数据(添加一个链表节点) */
    cJSON_AddStringToObject(cjson_test, "name", "mculover666");

    /* 添加一条整数类型的JSON数据(添加一个链表节点) */
    cJSON_AddNumberToObject(cjson_test, "age", 22);

    /* 添加一条浮点类型的JSON数据(添加一个链表节点) */
    cJSON_AddNumberToObject(cjson_test, "weight", 55.5);

    /* 添加一个嵌套的JSON数据(添加一个链表节点) */
    cjson_address = cJSON_CreateObject();
    cJSON_AddStringToObject(cjson_address, "country", "China");
    cJSON_AddNumberToObject(cjson_address, "zip-code", 111111);
    cJSON_AddItemToObject(cjson_test, "address", cjson_address);

    /* 添加一个数组类型的JSON数据(添加一个链表节点) */
    cjson_skill = cJSON_CreateArray();
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "C" ));
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Java" ));
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Python" ));
    cJSON_AddItemToObject(cjson_test, "skill", cjson_skill);

    /* 添加一个值为 False 的布尔类型的JSON数据(添加一个链表节点) */
    cJSON_AddFalseToObject(cjson_test, "student");

    /* 打印JSON对象(整条链表)的所有数据 */
    str = cJSON_Print(cjson_test);
    printf("%s\n", str);

    return 0;
}

生成JSON

{
        "name": "mculover666",
        "age":  22,
        "weight":       55.5,
        "address":      {
                "country":      "China",
                "zip-code":     111111
        },
        "skill":        ["C", "Java", "Python"],
        "student":      false
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值