目標:對下面這種結構的json資料解析
,]
}
處理步驟:
1. 將json資料儲存在a.txt內
2. 用fopen對資料檔案進行讀取
3. 將讀取出的資料流寫入到乙個字串陣列中
4. 用cjson_parse將字串陣列轉換為json資料物件root
5. 對root由外層向內層解析
**如下:
#include
#include
"cjson.h"
using namespace std;
void
weathertest()
fseek
(fp,0,
seek_end);
//將流指標fp指向末位
int file_size =
ftell
(fp)
;//獲得流的長度
fseek
(fp,0,
seek_set);
//將流指標fp指向流開始
char
* buffer =
(char*)
malloc
(file_size *
sizeof
(char))
;memset
(buffer,
0, file_size +1)
;//加的最後一位用作結束符\0, 避免讀取buffer的時候因沒有結束符而越界
int ret =
fread
(buffer, file_size,
sizeof
(char
), fp)
;//形參1:將要寫入的容器,形參2:每個讀取單元所佔位元組數,形參3:讀取的單元數,形參4:流指標if(
-1== ret)
printf
("%s\n"
, buffer)
;fclose
(fp)
;//關閉檔案
//將該字串資料轉換為json資料物件
cjson *root =
cjson_parse
(buffer)
;//解析if(
!root)
//若root為nullptr指標,則解析失敗
auto value =
cjson_getobjectitem
(root,
"time");
//根據key值獲取對應的valueif(
!value)
char
*data =
cjson_print
(value)
;//把資料轉換為字串輸出
printf
("time = %s\n"
, data)
;free
(data)
;//cjson_pring()會向系統申請記憶體(malloc),每次使用完要記得釋放,否則會造成記憶體洩漏
value =
cjson_getobjectitem
(root,
"result");
if(!value)
auto len =
cjson_getarraysize
(value)
;//result是乙個陣列,此處獲取陣列長度
cjson *
date
(nullptr),*
text_night
(nullptr),*
text_day
(nullptr)
;for
(autoi(
0); i != len;
++i)
//對每個陣列元素進行處理
char
*print1 =
cjson_print
(date)
;char
*print2 =
cjson_print
(text_night)
;char
*print3 =
cjson_print
(text_day)
;printf
("%s\t%s\t%s\n"
, print1, print2, print3)
;free
(print1)
;free
(print2)
;free
(print3);}
cjson_delete
(root);}
intmain()
輸出結果如下
json快速入門(cjson解析)
json是儲存和交換文字資訊的語法,與xml類似。json有兩種結構,分別是陣列和物件 json解析環境 cjson是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為ansi c標準的json解析器,cjson庫包括cjson.h和cjson.c兩個檔案,放入指定目錄直接呼叫就可以了。1.有一對基本的 ...
使用cJSON庫解析JSON
cjson是乙個基於c的json解析庫,這個庫非常簡單,只有cjson.c和cjson.h兩個檔案,支援json的解析和封裝,需要呼叫時,只需要 include cjson.h 就可以使用了,json官方 json json字串 這個json物件只有兩個鍵值對,鍵name對應字串andy,鍵age對...
使用cJSON解析JSON字串
一 為何選擇cjson 我們在使用json格式時,如果只是處理簡單的協議,可以依據json格式,通過對字串 的操作來進行解析與建立。然而隨著協議逐漸複雜起來,經常會遇到一些未考慮周全的地方,需要進一 步的完善解析方法,此時,使用比較完善的json解析庫的需求就提出來了。基於方便引用的考慮,我們希望這...