C语言 cJson 简单入门使用

json是以下格式的数据

{
	"奔驰":	{
		"factory":	"一汽大众",
		"last":	31,
		"price":	83,
		"sell":	49,
		"sum":	80,
		"other":	[123, 1, "hello, world", {
				"梅斯德斯奔驰":	"心所向, 持以恒"
			}]
	}
}

每一层都对应一个key和value

 

下面展示如何使用cJson开源工具包创建一个json格式的数据。

#include 
#include 
#include "cJSON.h"

int main()
{
    // 创建对象
    cJSON* obj = cJSON_CreateObject();
    // 创建子对象
    cJSON* subObj = cJSON_CreateObject();
    // 添加key-value
    cJSON_AddItemToObject(subObj, "factory", cJSON_CreateString("一汽大众"));
    cJSON_AddItemToObject(subObj,"last",cJSON_CreateNumber(31));
    cJSON_AddItemToObject(subObj,"price",cJSON_CreateNumber(83));
    cJSON_AddItemToObject(subObj,"sell",cJSON_CreateNumber(49));
    cJSON_AddItemToObject(subObj,"sum",cJSON_CreateNumber(80));
    // 创建一个json数组
    cJSON* array = cJSON_CreateArray();
    cJSON_AddItemToArray(array,cJSON_CreateNumber(123));
    cJSON_AddItemToArray(array,cJSON_CreateNumber(1));
    cJSON_AddItemToArray(array,cJSON_CreateString("hello, world"));
    // 数组中的对象
    cJSON* subsub= cJSON_CreateObject();
    cJSON_AddItemToObject(subsub,"梅斯德斯奔驰",cJSON_CreateString("心所向, 持以恒"));
    cJSON_AddItemToObject(subObj,"other",array);
    // obj 中添加key_value
    cJSON_AddItemToObject(obj,"奔驰", subObj);

    // 数据格式化
    char* data = cJSON_Print(obj);
    FILE *fp = fopen("car.json","w");
    fwrite(data,sizeof(char),strlen(data)+1,fp);
    fclose(fp);
    return 0;

}

使用的时候只需要3个文件,cJSON.h, cJSON.c 和所用文件,

编译命令 ,-lm 表示需要链接数学库

gcc create.c cJSON.c -o create -lm

下面的代码读取一个json文件并完成解析

#include 
#include 
#include "cJSON.h"

int main()
{
    FILE* fp = fopen("car.json", "r");
    char buf[1024] = {0};
    fread(buf, 1, sizeof(buf), fp);
    cJSON* root = cJSON_Parse(buf);

    cJSON* subobj = cJSON_GetObjectItem(root,"奔驰");
    if(subobj){
        // 获取子对象
        cJSON* fasctory = cJSON_GetObjectItem(subobj,"factory");
        cJSON* last = cJSON_GetObjectItem(subobj,"last");
        cJSON* price = cJSON_GetObjectItem(subobj, "price");
        cJSON* sell = cJSON_GetObjectItem(subobj,"sell");
        cJSON* sum = cJSON_GetObjectItem(subobj,"sum");
        cJSON* other = cJSON_GetObjectItem(subobj,"other");

        // 打印value的值
        printf("奔驰:  \n");
        printf("    factor:  %s\n",cJSON_pRINT(fasctory));
        printf("    last:  %s\n",cJSON_pRINT(last));
        printf("    price:  %s\n",cJSON_pRINT(price));
        printf("    sell:  %s\n",cJSON_pRINT(sell));
        printf("    sum:  %s\n",cJSON_pRINT(sum));

        // 打印数组内容
        printf("    other:\n");
        if(other->type == cJSON_Array){
            for(int i=0;itype == cJSON_String){
                    printf("       %s  \n",node->valuestring);
                }
                if(node->type == cJSON_Number){
                    printf("        %s  \n",node->valueint);
                }
                if(node->type == cJSON_True){
                    printf("        %s  \n",node->valueint);
                }
                if(node->type == cJSON_False){
                    printf("        %s  \n",node->valueint);
                }
            }
        }
        cJSON_Delete(root);
        fclose(fp);
    }
}

 

你可能感兴趣的:(算法)