c 第三方json解析庫 jsoncpp的使用

2021-07-28 11:55:11 字數 3236 閱讀 6876

json是一種資料交換格式,比較適合編寫和閱讀。jsoncpp是採用c++語言編寫的用來處理json格式的第三方庫。直接來說明改如何使用它,本文是基於windows下的。

解壓後用vs開啟/makefiles/vs71/jsoncpp.sln專案,選擇lib_json專案編譯來生成lib檔案,為了方便,debug和release都需要生成。

建立乙個win32的空專案,將生成的lib檔案包含,附加包含目錄新增源**中的include資料夾。後面簡單說下比較常用的幾種json處理方法。

解析json物件:

1.首先看看最簡單的一種json格式,只有鍵-值的一重巢狀:

我們直接將上面的資料初始化到到string物件中,方便解析,後面都是如此

[cpp]view plain

copy

std::string json = 

"";  

json::reader reader;    

json::value root;    

std::string name;  

intid = 0;  

if(reader.parse(json, root))  

// reader將json字串解析到root,root將包含json裡所有子元素     

2.再看看陣列的:

[ ,   ]

[cpp]view plain

copy

std::string json = 

"[ ,  ]"

;  json::reader reader;    

json::value root;    

std::string name;  

intid = 0;  

std::map, std::string> mapjson;  

if(reader.parse(json, root))  

// reader將json字串解析到root,root將包含json裡所有子元素   

}   

3.如果是這樣的陣列:

[cpp]view plain

copy

std::string json = 

" ";  

json::reader reader;    

json::value root;    

std::string name;  

intid = 0;  

if(reader.parse(json, root))  

// reader將json字串解析到root,root將包含json裡所有子元素   

for(int

i = 0; i < root[

"name"

].size(); ++i)  

}   

這種情況其實和上一種是類似的。

4.看看多重巢狀的情況,為了簡便,我們巢狀兩層:

}[cpp]view plain

copy

std::string json = 

" }"

;  json::reader reader;    

json::value root;    

std::string name;  

intid = 0;  

intage = 0;  

if(reader.parse(json, root))  

// reader將json字串解析到root,root將包含json裡所有子元素   

其實這種情況和第一種的類似,只是通過root["key"]取到的還是鍵值對,繼續通過key取值即可。

基本上再複雜的資料格式也是上面幾種情況的組合而已。

json物件的生成:

1.生成上面第一種情況的json格式:

[cpp]view plain

copy

json::value root;    

root["id"

] = 123;  

root["name"

] = 

"wu"

;  std::string json = root.tostyledstring();  

我們會將生成的json物件序列化到string物件中去,後面也是如此。

2.生成上面第二種情況的json:

[cpp]view plain

copy

json::value root;  

for(

inti = 0; i < 2; ++i)  

else

}  std::string json = root.tostyledstring();  

還可以這樣生成:

[cpp]view plain

copy

json::value root;  

json::value item;  

for(

inti = 0; i < 2; ++i)  

else

}  std::string json = root.tostyledstring();  

3.生成上面第三種情況的json:

[cpp]view plain

copy

json::value root;  

for(

inti = 0; i < 2; ++i)  

else

}  std::string json = root.tostyledstring();  

4.生成上面第四種情況的json:

[cpp]view plain

copy

json::value root;  

root["id"

] = 1;  

root["data"

]["name"

] = 

"wu"

;  root["data"

]["age"

] = 26;  

std::string json = root.tostyledstring();  

其實解析和生成json是互逆的,只要明白這幾種情況,其他的無非是這幾種情況的各種組合,原理是一樣的。

c 第三方json解析庫 jsoncpp的使用

json是一種資料交換格式,比較適合編寫和閱讀。jsoncpp是採用c 語言編寫的用來處理json格式的第三包。直接來說明改如何使用它,本文是基於windows下的。建立乙個win32的空專案,將生成的lib檔案包含,附加包含目錄新增源 中的include資料夾。後面簡單說下比較常用的幾種json處...

關於解析json 使用第三方庫Gson

解析json是我們必備的技能之一,解析json可以使用原生api,也可以使用第三方庫。前面我們有說過使用原生api,不過在我們解析比較複雜的json資料的時候如果使用原生api會顯得很麻煩。因為你要一層一層的往裡解析,資料多的話可以嘗試使用第三方庫gson來解析。使用gson解析json資料 這次解...

使用json心得(第三方庫jackson)

collectionpersonresult new arraylist 將要傳送給前台的資料放入map集合去 mapmap new hashmap map.put person personresult map.put departmentcount 50 定義乙個totalresult物件,封裝...