使用cJSON庫解析JSON

2021-09-19 19:58:58 字數 3937 閱讀 2756

cjson是乙個基於c的json解析庫,這個庫非常簡單,只有cjson.c和cjson.h兩個檔案,支援json的解析和封裝,需要呼叫時,只需要#include "cjson.h"就可以使用了,

json官方**:json

json字串:

這個json物件只有兩個鍵值對,鍵name對應字串andy,鍵age對應數字20。

void parse_str1(void)

"; cjson *str1_json, *str1_name, *str1_age;

printf("str1:%s\n\n",str1);

str1_json = cjson_parse(str1); //建立json解析物件,返回json格式是否正確

if (!str1_json)

else

str1_age = cjson_getobjectitem(str1_json, "age"); //獲取age鍵對應的值的資訊

if(str1_age->type==cjson_number)

cjson_delete(str1_json);//釋放記憶體}}

執行結果:

json字串:

解析函式:

void parse_str2(void)

,],\"time\":\"2018-11-17\"}";

cjson *root = 0;

cjson *loc_json = 0;

cjson *name1_json,*name2_json;

char *time_str, *str_tmp;

root = cjson_parse(str2);

if(!root)

printf("str2 json格式錯誤:%s \r\n", cjson_geterrorptr());

else

}cjson_delete(loc_json);

}

執行結果:

json字串:

}

解析函式:

void parse_bj_time(void)

}"; cjson *root;

cjson *result_json;

char *datetime, *week;

root = cjson_parse(bj_time_str);

if(root)

}cjson_delete(root);

cjson_delete(result_json);

}

執行結果:

json字串:

,

"daily": [, , ],

"last_update": "2018-11-18t11:00:00+08:00"}]}

解析函式:

void parse_seniverse_weather(void)

,\"daily\":[,,],\"last_update\":\"2018-11-18t11:00:00+08:00\"}]}";

cjson *root;

cjson *results;

cjson *last_update;

cjson *loc_json, *daily_json;

cjson *forecast_json;

char *loc_tmp, *weather_tmp, *update_tmp;

int i = 0;

root = cjson_parse((const char*)weather_str);

if(root)

}else

printf("daily json格式錯誤\r\n");

last_update = cjson_getobjectitem(results, "last_update");

update_tmp = last_update->valuestring;

if(last_update)

}else

}else

cjson_delete(root);

cjson_delete(results);

}

執行結果:

json字串:

,

"update": ,

"status": "ok",

"daily_forecast": [, , ]}]}

解析函式:

//解析和風天氣,格式和心知天氣非常像

void parse_heweather(void)

,\"update\":,\"status\":\"ok\",\"daily_forecast\":[,,]}]}";

cjson *root;

cjson *results;

cjson *basic_json, *update_json, *forecast_json;

cjson *daily_json;

int i = 0;

char *basic_tmp, *update_tmp, *status_tmp, *weather_tmp;

root = cjson_parse(heweather_str);

if(root)

update_json = cjson_getobjectitem(results, "update");

if(update_json)

status_tmp = cjson_getobjectitem(results, "status") -> valuestring;

printf("解析狀態:%s\n\n", status_tmp);

daily_json = cjson_getobjectitem(results, "daily_forecast");

if(daily_json)}}

}cjson_delete(root);

cjson_delete(results);

cjson_delete(basic_json);

cjson_delete(update_json);

cjson_delete(forecast_json);

cjson_delete(daily_json);

}

執行結果:

免費的天氣api介面:天氣api

歷史精選文章:

使用cJSON解析JSON字串

一 為何選擇cjson 我們在使用json格式時,如果只是處理簡單的協議,可以依據json格式,通過對字串 的操作來進行解析與建立。然而隨著協議逐漸複雜起來,經常會遇到一些未考慮周全的地方,需要進一 步的完善解析方法,此時,使用比較完善的json解析庫的需求就提出來了。基於方便引用的考慮,我們希望這...

json快速入門(cjson解析)

json是儲存和交換文字資訊的語法,與xml類似。json有兩種結構,分別是陣列和物件 json解析環境 cjson是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為ansi c標準的json解析器,cjson庫包括cjson.h和cjson.c兩個檔案,放入指定目錄直接呼叫就可以了。1.有一對基本的 ...

cJSON對json資料的解析

目標 對下面這種結構的json資料解析 處理步驟 1.將json資料儲存在a.txt內 2.用fopen對資料檔案進行讀取 3.將讀取出的資料流寫入到乙個字串陣列中 4.用cjson parse將字串陣列轉換為json資料物件root 5.對root由外層向內層解析 如下 include inclu...