cJSON用法まとめ
cJSONは使いやすい軽量級JSON解析器で、JSONを作成したり、C言語で書かれたりして、最新のコードは約700行以上あります.
ダウンロードアドレス
https://github.com/DaveGamble/cJSON https://sourceforge.net/projects/cjson/
コンパイル方式(cJSONライブラリ、全部で2つのファイル:cJSON.c、cJSON.h)
gcc cJSON.c main.c -o main -lm
基本インタフェースの説明
作成されたJSON形式の説明:{}はObjectを表し、[]はArrayを表す
cJSON_CreateObject:JSON構造体cJSON_を作成するAddItemToObject:JSON構造体にitemを追加するcJSON_Print:JSON形式の文字列を通常文字列cJSON_に変換Parse:通常文字列をJSON形式の文字列cJSON_に変換Delete:JSON構造体を解放する
以下のマクロ定義は、JSONノードの作成をより迅速に支援します.
たとえば、「name」:「Tom」のノードを追加する場合、次の2行のコードは等しいです.
JSONの作成と解析のdemoについて説明します
JSONの作成方法
demo1
demo 1のコード実装の作成
demo2
demo 2の実装方法の作成
JSONの解析方法
上のdemo 1を解析
上のdemo 2を解析
PS:ここでは便利なオンラインJSONフォーマットのチェックとフォーマットのウェブサイトを紹介しますhttp://pro.jsonlint.com/
ダウンロードアドレス
https://github.com/DaveGamble/cJSON https://sourceforge.net/projects/cjson/
コンパイル方式(cJSONライブラリ、全部で2つのファイル:cJSON.c、cJSON.h)
gcc cJSON.c main.c -o main -lm
基本インタフェースの説明
作成されたJSON形式の説明:{}はObjectを表し、[]はArrayを表す
cJSON_CreateObject:JSON構造体cJSON_を作成するAddItemToObject:JSON構造体にitemを追加するcJSON_Print:JSON形式の文字列を通常文字列cJSON_に変換Parse:通常文字列をJSON形式の文字列cJSON_に変換Delete:JSON構造体を解放する
以下のマクロ定義は、JSONノードの作成をより迅速に支援します.
#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())
#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
たとえば、「name」:「Tom」のノードを追加する場合、次の2行のコードは等しいです.
cJSON_AddStringToObject(root, "name", "Tom")
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Tom"))
JSONの作成と解析のdemoについて説明します
JSONの作成方法
demo1
{
"name": "Tom",
"age": 25,
"marry": true,
"child": null
}
demo 1のコード実装の作成
char * cjson_create_test1(void)
{
char * out;
cJSON *root;
root = cJSON_CreateObject();
if(!root)
{
printf("cJSON create error!!
");
return NULL;
}
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Tom"));
cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(25));
cJSON_AddItemToObject(root, "marry", cJSON_CreateBool(1));
cJSON_AddItemToObject(root, "child", cJSON_CreateNull());
out=cJSON_Print(root);
cJSON_Delete(root);
if(out)
{
printf("%s
", out);
return out;
}
return NULL;
}
demo2
{
"name": "Tom",
"age": 25,
"marry": true,
"children": [{
"name": "May",
"age": 2
}, {
"name": "Kendy",
"age": 3
}, {
"name": "Mark",
"age": 1
}]
}
demo 2の実装方法の作成
char * cjson_create_test2(void)
{
char * out;
cJSON *root;
cJSON *child, *child1, *child2, *child3;
root = cJSON_CreateObject();
if(!root)
{
printf("cJSON create error!!
");
return NULL;
}
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Tom"));
cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(25));
cJSON_AddItemToObject(root, "marry", cJSON_CreateBool(1));
child = cJSON_CreateArray();
CJSON_CHK_FAIL(child, NULL);
cJSON_AddItemToObject(root, "children", child);
child1 = cJSON_CreateObject();
CJSON_CHK_FAIL(child1, NULL);
cJSON_AddItemToObject(child1, "name", cJSON_CreateString("May"));
cJSON_AddItemToObject(child1, "age", cJSON_CreateNumber(2));
child2 = cJSON_CreateObject();
CJSON_CHK_FAIL(child2, NULL);
cJSON_AddItemToObject(child2, "name", cJSON_CreateString("Kendy"));
cJSON_AddItemToObject(child2, "age", cJSON_CreateNumber(3));
child3 = cJSON_CreateObject();
CJSON_CHK_FAIL(child3, NULL);
cJSON_AddItemToObject(child3, "name", cJSON_CreateString("Mark"));
cJSON_AddItemToObject(child3, "age", cJSON_CreateNumber(1));
cJSON_AddItemToArray(child, child1);
cJSON_AddItemToArray(child, child2);
cJSON_AddItemToArray(child, child3);
out=cJSON_Print(root);
cJSON_Delete(root);
if(out)
{
printf("%s
", out);
return out;
}
return NULL;
}
JSONの解析方法
上のdemo 1を解析
void cjson_parse_test1(void)
{
cJSON * root;
cJSON *name, *age, *marry, *child;
root = cJSON_Parse(cjson_create_test1());
if(!root)
{
printf("cJSON_Parse error!!
");
return;
}
name = cJSON_GetObjectItem(root, "name");
if(name)
{
printf("Get name value : %s
", name->valuestring);
}
age = cJSON_GetObjectItem(root, "age");
if(age)
{
printf("Get age value : %d
", age->valueint);
}
marry = cJSON_GetObjectItem(root, "marry");
if(marry)
{
printf("Get marry value : %d
", marry->valueint);
}
child = cJSON_GetObjectItem(root, "child");
if(child)
{
printf("Get child value : %s
", marry->valuestring);
}
cJSON_Delete(root);
}
上のdemo 2を解析
void cjson_parse_test2(void)
{
cJSON * root;
cJSON *name, *age, *marry, *children;
cJSON *childNode, *childName, *childAge;
root = cJSON_Parse(cjson_create_test2());
if(!root)
{
printf("cJSON_Parse error!!
");
return;
}
name = cJSON_GetObjectItem(root, "name");
if(name)
{
printf("Get name value : %s
", name->valuestring);
}
age = cJSON_GetObjectItem(root, "age");
if(age)
{
printf("Get age value : %d
", age->valueint);
}
marry = cJSON_GetObjectItem(root, "marry");
if(marry)
{
printf("Get marry value : %d
", marry->valueint);
}
children = cJSON_GetObjectItem(root, "children");
if(children)
{
int size = cJSON_GetArraySize(children);
printf("Get children size : %d
", size);
int i = 0;
for(i=0; iif(childNode)
{
childName = cJSON_GetObjectItem(childNode,"name");
if(childName)
{
printf("Get child name : %s
", childName->valuestring);
}
childAge = cJSON_GetObjectItem(childNode,"age");
if(childAge)
{
printf("Get child age : %d
", childAge->valueint);
}
}
}
}
cJSON_Delete(root);
}
PS:ここでは便利なオンラインJSONフォーマットのチェックとフォーマットのウェブサイトを紹介しますhttp://pro.jsonlint.com/