json是一種資料交換格式,比較適合編寫和閱讀。jsoncpp是採用c++語言編寫的用來處理json格式的第三包。直接來說明改如何使用它,本文是基於windows下的。
建立乙個win32的空專案,將生成的lib檔案包含,附加包含目錄新增源**中的include資料夾。後面簡單說下比較常用的幾種json處理方法。
解析json物件:
1.首先看看最簡單的一種json格式,只有鍵-值的一重巢狀:
「id」 : 123,
"name" : "wu"
我們直接將上面的資料初始化到到string物件中,方便解析,後面都是如此
std::string json = "";
json::reader reader;
json::value root;
std::string name;
int id = 0;
if (reader.parse(json, root)) // reader將json字串解析到root,root將包含json裡所有子元素
2.再看看陣列的:
[ , ]
std::string json = "[ , ]";
json::reader reader;
json::value root;
std::string name;
int id = 0;
std::mapmapjson;
if (reader.parse(json, root)) // reader將json字串解析到root,root將包含json裡所有子元素
}
3.如果是這樣的陣列:
「id」 : [1, 2],
"name" : ["wu", "tan"]
std::string json = " ";
json::reader reader;
json::value root;
std::string name;
int id = 0;
if (reader.parse(json, root)) // reader將json字串解析到root,root將包含json裡所有子元素
for (int i = 0; i < root["name"].size(); ++i)
}
這種情況其實和上一種是類似的。
4.看看多重巢狀的情況,為了簡便,我們巢狀兩層:
"id" : 1,
"data" :
std::string json = " }";
json::reader reader;
json::value root;
std::string name;
int id = 0;
int age = 0;
if (reader.parse(json, root)) // reader將json字串解析到root,root將包含json裡所有子元素
其實這種情況和第一種的類似,只是通過root["key"]取到的還是鍵值對,繼續通過key取值即可。
基本上再複雜的資料格式也是上面幾種情況的組合而已。
json物件的生成:
1.生成上面第一種情況的json格式:
json::value root;
root["id"] = 123;
root["name"] = "wu";
std::string json = root.tostyledstring();
我們會將生成的json物件序列化到string物件中去,後面也是如此。
2.生成上面第二種情況的json:
json::value root;
for (int i = 0; i < 2; ++i)
else }
std::string json = root.tostyledstring();
還可以這樣生成:
json::value root;
json::value item;
for (int i = 0; i < 2; ++i)
else
}std::string json = root.tostyledstring();
3.生成上面第三種情況的json:
json::value root;
for (int i = 0; i < 2; ++i)
else }
std::string json = root.tostyledstring();
4.生成上面第四種情況的json:
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下的。解壓後用vs開啟 makefiles vs71 jsoncpp.sln專案,選擇lib json專案編譯來生成lib檔案,為了方便,...
關於解析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物件,封裝...