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物件,封裝...