CJSON使用

項(xiàng)目地址:https://github.com/DaveGamble/cJSON

數(shù)據(jù)封裝


#include <stdio.h>

#include "cJSON.h"

int main(void)

{

? ? cJSON* cjson_test = NULL;

? ? cJSON* cjson_address = NULL;

? ? cJSON* cjson_skill = NULL;

? ? char* str = NULL;

? ? /* 創(chuàng)建一個(gè)JSON數(shù)據(jù)對(duì)象(鏈表頭結(jié)點(diǎn)) */

? ? cjson_test = cJSON_CreateObject();

? ? /* 添加一條字符串類(lèi)型的JSON數(shù)據(jù)(添加一個(gè)鏈表節(jié)點(diǎn)) */

? ? cJSON_AddStringToObject(cjson_test, "name", "mculover666");

? ? /* 添加一條整數(shù)類(lèi)型的JSON數(shù)據(jù)(添加一個(gè)鏈表節(jié)點(diǎn)) */

? ? cJSON_AddNumberToObject(cjson_test, "age", 22);

? ? /* 添加一條浮點(diǎn)類(lèi)型的JSON數(shù)據(jù)(添加一個(gè)鏈表節(jié)點(diǎn)) */

? ? cJSON_AddNumberToObject(cjson_test, "weight", 55.5);

? ? /* 添加一個(gè)嵌套的JSON數(shù)據(jù)(添加一個(gè)鏈表節(jié)點(diǎn)) */

? ? cjson_address = cJSON_CreateObject();

? ? cJSON_AddStringToObject(cjson_address, "country", "China");

? ? cJSON_AddNumberToObject(cjson_address, "zip-code", 111111);

? ? cJSON_AddItemToObject(cjson_test, "address", cjson_address);

? ? /* 添加一個(gè)數(shù)組類(lèi)型的JSON數(shù)據(jù)(添加一個(gè)鏈表節(jié)點(diǎn)) */

? ? cjson_skill = cJSON_CreateArray();

? ? cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "C" ));

? ? cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Java" ));

? ? cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Python" ));

? ? cJSON_AddItemToObject(cjson_test, "skill", cjson_skill);

? ? /* 添加一個(gè)值為 False 的布爾類(lèi)型的JSON數(shù)據(jù)(添加一個(gè)鏈表節(jié)點(diǎn)) */

? ? cJSON_AddFalseToObject(cjson_test, "student");

? ? /* 打印JSON對(duì)象(整條鏈表)的所有數(shù)據(jù) */

? ? str = cJSON_Print(cjson_test);

? ? printf("%s\n", str);

? ? return 0;

}


————————————————

數(shù)據(jù)解析


#include <stdio.h>

#include "cJSON.h"

char *message =

"{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \

? ? \"name\":\"mculover666\",? \

? ? \"age\": 22,? ? ? ? ? ? ? ? \

? ? \"weight\": 55.5,? ? ? ? ? \

? ? \"address\":? ? ? ? ? ? ? ? \

? ? ? ? {? ? ? ? ? ? ? ? ? ? ? \

? ? ? ? ? ? \"country\": \"China\",\

? ? ? ? ? ? \"zip-code\": 111111\

? ? ? ? },? ? ? ? ? ? ? ? ? ? ? \

? ? \"skill\": [\"c\", \"Java\", \"Python\"],\

? ? \"student\": false? ? ? ? ? \

}";

int main(void)

{

? ? cJSON* cjson_test = NULL;

? ? cJSON* cjson_name = NULL;

? ? cJSON* cjson_age = NULL;

? ? cJSON* cjson_weight = NULL;

? ? cJSON* cjson_address = NULL;

? ? cJSON* cjson_address_country = NULL;

? ? cJSON* cjson_address_zipcode = NULL;

? ? cJSON* cjson_skill = NULL;

? ? cJSON* cjson_student = NULL;

? ? int? ? skill_array_size = 0, i = 0;

? ? cJSON* cjson_skill_item = NULL;

? ? /* 解析整段JSO數(shù)據(jù) */

? ? cjson_test = cJSON_Parse(message);

? ? if(cjson_test == NULL)

? ? {

? ? ? ? printf("parse fail.\n");

? ? ? ? return -1;

? ? }

? ? /* 依次根據(jù)名稱(chēng)提取JSON數(shù)據(jù)(鍵值對(duì)) */

? ? cjson_name = cJSON_GetObjectItem(cjson_test, "name");

? ? cjson_age = cJSON_GetObjectItem(cjson_test, "age");

? ? cjson_weight = cJSON_GetObjectItem(cjson_test, "weight");

? ? printf("name: %s\n", cjson_name->valuestring);

? ? printf("age:%d\n", cjson_age->valueint);

? ? printf("weight:%.1f\n", cjson_weight->valuedouble);

? ? /* 解析嵌套json數(shù)據(jù) */

? ? cjson_address = cJSON_GetObjectItem(cjson_test, "address");

? ? cjson_address_country = cJSON_GetObjectItem(cjson_address, "country");

? ? cjson_address_zipcode = cJSON_GetObjectItem(cjson_address, "zip-code");

? ? printf("address-country:%s\naddress-zipcode:%d\n", cjson_address_country->valuestring, cjson_address_zipcode->valueint);

? ? /* 解析數(shù)組 */

? ? cjson_skill = cJSON_GetObjectItem(cjson_test, "skill");

? ? skill_array_size = cJSON_GetArraySize(cjson_skill);

? ? printf("skill:[");

? ? for(i = 0; i < skill_array_size; i++)

? ? {

? ? ? ? cjson_skill_item = cJSON_GetArrayItem(cjson_skill, i);

? ? ? ? printf("%s,", cjson_skill_item->valuestring);

? ? }

? ? printf("\b]\n");

? ? /* 解析布爾型數(shù)據(jù) */

? ? cjson_student = cJSON_GetObjectItem(cjson_test, "student");

? ? if(cjson_student->valueint == 0)

? ? {

? ? ? ? printf("student: false\n");

? ? }

? ? else

? ? {

? ? ? ? printf("student:error\n");

? ? }


? ? return 0;

}


————————————————

內(nèi)存及時(shí)釋放

cJSON的所有操作都是基于鏈表的雀监,所以cJSON在使用過(guò)程中大量的使用malloc從堆中分配動(dòng)態(tài)內(nèi)存的贞铣,所以在使用完之后鳞疲,應(yīng)當(dāng)及時(shí)調(diào)用下面的函數(shù),清空cJSON指針?biāo)赶虻膬?nèi)存掌眠,該函數(shù)也可用于刪除某一條數(shù)據(jù):


(void) cJSON_Delete(cJSON *item);


————————————————

原文鏈接:https://blog.csdn.net/Mculover666/article/details/103796256

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市艾君,隨后出現(xiàn)的幾起案子缰猴,更是在濱河造成了極大的恐慌氛琢,老刑警劉巖喊递,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阳似,居然都是意外死亡骚勘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)撮奏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俏讹,“玉大人,你說(shuō)我怎么就攤上這事畜吊≡蠼” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵定拟,是天一觀的道長(zhǎng)于微。 經(jīng)常有香客問(wèn)我,道長(zhǎng)青自,這世上最難降的妖魔是什么株依? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮延窜,結(jié)果婚禮上恋腕,老公的妹妹穿的比我還像新娘。我一直安慰自己逆瑞,他們只是感情好荠藤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著获高,像睡著了一般哈肖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上念秧,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天淤井,我揣著相機(jī)與錄音,去河邊找鬼摊趾。 笑死币狠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砾层。 我是一名探鬼主播漩绵,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肛炮!你這毒婦竟也來(lái)了止吐?” 一聲冷哼從身側(cè)響起宝踪,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祟印,沒(méi)想到半個(gè)月后肴沫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體粟害,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蕴忆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悲幅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片套鹅。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汰具,靈堂內(nèi)的尸體忽然破棺而出卓鹿,到底是詐尸還是另有隱情,我是刑警寧澤留荔,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布吟孙,位于F島的核電站,受9級(jí)特大地震影響聚蝶,放射性物質(zhì)發(fā)生泄漏杰妓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一碘勉、第九天 我趴在偏房一處隱蔽的房頂上張望巷挥。 院中可真熱鬧,春花似錦验靡、人聲如沸倍宾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)高职。三九已至,卻和暖如春辞州,著一層夾襖步出監(jiān)牢的瞬間怔锌,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工孙技, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留产禾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓牵啦,卻偏偏與公主長(zhǎng)得像亚情,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哈雏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容