1. 程式人生 > >cJSON庫介紹及程式設計例項

cJSON庫介紹及程式設計例項

JSON是一種輕量級的資料交換格式,基於JavaScript的一個子集。JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣。這些特性使JSON成為理想的資料交換語言。易於人閱讀與編寫,同時也易於機器解析和生成。

cJSON是一個超輕巧,攜帶方便,單檔案,簡單的可以作為ANSI-C標準的JSON解析器。

cJSON下載地址:點選開啟連結

檢視cJSON程式碼可以看到,cJSON結構體如下:

typedef struct cJSON {
	struct cJSON *next,*prev;
	struct cJSON *child;

	int type;

	char *valuestring;
	int valueint;
	double valuedouble;

	char *string;
} cJSON;

cJSON以雙鏈表的形式儲存。

共有7種類型:

/* cJSON Types: */
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6

cJSON例項:
#include<stdio.h>
#include<stdlib.h>
#include"cJSON.h"

int main(int argc,const char *argv[])
{
	cJSON *root,*fmt,*json,*format;
	char *out;
	int i;
	//建立JSON字串
	root = cJSON_CreateObject();
	cJSON_AddItemToObject(root,"name",cJSON_CreateString("Jack"));
	cJSON_AddItemToObject(root,"format",fmt = cJSON_CreateObject());
	cJSON_AddStringToObject(fmt,"type","rect");
	cJSON_AddNumberToObject(fmt,"width",1000);
	cJSON_AddNumberToObject(fmt,"height",2000.123);
//	cJSON_AddFalseToObject(fmt,"interlace");
	cJSON_AddNumberToObject(fmt,"frame rate",24);
	out = cJSON_Print(root);	//out中儲存的是JSON格式的字串
	cJSON_Delete(root);		//刪除cJSON
	printf("%s\n",out);		//終端列印輸出

	json = cJSON_Parse(out);	//解析JSON格式的字串
	free(out);			//釋放字串空間
	if(!json)
	{
		printf("Error before:[%s]\n",cJSON_GetErrorPtr());
	}
	else
	{
		//提取出各個資料並列印輸出
		char *name = cJSON_GetObjectItem(json,"name")->valuestring;
		printf("name: %s\n",name);
		format = cJSON_GetObjectItem(json,"format");
		char *type = cJSON_GetObjectItem(format,"type")->valuestring;
		printf("type: %s\n",type);
		int width = cJSON_GetObjectItem(format,"width")->valueint;			
		printf("width: %d\n",width);
		double height = cJSON_GetObjectItem(format,"height")->valuedouble;		
		printf("width: %f\n",height);
		int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;

		printf("framerate: %d\n",framerate);
		
	}
}

編譯:把cJSON.c和cJSON.h放在編寫程式碼目錄下,同時編譯cJSON和工作程式碼:gcc  cJSON.c  test.c  -o  test  -lm

執行結果: