C言語cJson簡単入門使用

3931 ワード

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("  :  
"); printf(" factor: %s
",cJSON_pRINT(fasctory)); printf(" last: %s
",cJSON_pRINT(last)); printf(" price: %s
",cJSON_pRINT(price)); printf(" sell: %s
",cJSON_pRINT(sell)); printf(" sum: %s
",cJSON_pRINT(sum)); // printf(" other:
"); if(other->type == cJSON_Array){ for(int i=0;itype == cJSON_String){ printf(" %s
",node->valuestring); } if(node->type == cJSON_Number){ printf(" %s
",node->valueint); } if(node->type == cJSON_True){ printf(" %s
",node->valueint); } if(node->type == cJSON_False){ printf(" %s
",node->valueint); } } } cJSON_Delete(root); fclose(fp); } }