其他分享
首页 > 其他分享> > cJSON的简单使用

cJSON的简单使用

作者:互联网

代码下载地址: https://github.com/DaveGamble/cJSON

#include "cJSON.c"struct Person{
	int age;
    const char *name;};void printJson(cJSON * root)//以递归的方式打印json的最内层键值对{
    for(int i=0; i<cJSON_GetArraySize(root); i++)   //遍历最外层json键值对,就是遍历当前层次所有的键值对
    {
        cJSON * item = cJSON_GetArrayItem(root, i);        
        if(cJSON_Object == item->type)printJson(item);      //如果对应键的值仍为cJSON_Object就递归调用printJson
        else{   //值不为json对象就直接打印出键和值
            printf("%s : ", item->string);
            printf("%s\n", cJSON_Print(item));
        }
    }}int main() {
	/******************
			构建json对象并格式化成字符串输出
	******************/
	struct Person student[2] =
    {
        {
            12,
            "student_name1"
        },
        {
            14,
            "student_name2"
        }
    };
    const char *subject[7] ={"yuwen", "shuxue", "yingyu"};
    int chengji[3] = {60,65,70};//语文、数学、英语

    const char *week[7] =
    {
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday"
    };
    cJSON *root = NULL;
    cJSON *student_point = NULL;
    cJSON *chengji_point = NULL;

    int today = 1;
    root = cJSON_CreateObject();
    cJSON_AddItemToObject(root, "class", cJSON_CreateString("1班"));
    for (int i = 0; i < 2; i++)
    {
    	cJSON_AddItemToObject(root, "student", student_point = cJSON_CreateObject());
	    cJSON_AddStringToObject(student_point, "name", student[i].name);
	    cJSON_AddNumberToObject(student_point, "age", student[i].age);
	    cJSON_AddStringToObject(student_point, "today", week[today]);
	    cJSON_AddFalseToObject (student_point, "is_late"); //是否迟到
	    cJSON_AddItemToObject(student_point, "chengji", chengji_point = cJSON_CreateObject());
	    
	    for(int j=0; j<3; j++){
	    	cJSON_AddNumberToObject(student_point, subject[j], chengji[j]);
	    }
    }
    char *string = cJSON_Print(root);
    printf("%s\n", string);
    cJSON_Delete(root);

    root = cJSON_CreateObject();
    root = cJSON_CreateStringArray(subject, 3);
    root = cJSON_CreateIntArray(chengji, 3);
    printf("%s\n", cJSON_Print(root));
    cJSON_Delete(root);


    /******************
		由json字符串格式化为json对象并读取内容
	******************/
    root = cJSON_Parse(string);
    if (!root) {
        printf("Error before: [%s]\n",cJSON_GetErrorPtr());
    }else{
        printf("%s\n", "有格式的方式打印Json:");           
        printf("%s\n\n", cJSON_Print(root));
        printf("%s\n", "无格式方式打印json:");
        printf("%s\n\n", cJSON_PrintUnformatted(root));

        //获取键名、键值
        printf("%s : %s\n", cJSON_GetArrayItem(root,0)->string, cJSON_Print(cJSON_GetArrayItem(root,0)));

        //获取class下的cjson对象
        cJSON *item = NULL;
        item = cJSON_GetObjectItem(root, "student");
        printf("%s\n", cJSON_Print(item));                  

        printf("\n%s\n", "打印json所有最内层键值对:");
        printJson(root);
    }
    cJSON_Delete(root);

    
    return 0;}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:printf,item,cJSON,简单,int,student,使用,root
来源: https://blog.51cto.com/u_14175378/2759897