jsoncpp使用經驗
jsoncpp判斷某個字段是否存在的方法如下:
1)if (root["url"].type() != Json::nullValue)
2)if(value["sex"].isNull())
註意事項
1)jsoncpp是一個c++使用的json庫,通過重載中括號[]來實現json的語法,但是由於c++
是一個強類型的語言,jsoncpp在實現過程中,使用了大量的斷言,如果遇到類型不正確的
時候,就會強制斷言,導致程序退出
例如,將如下的字符串傳遞給jsoncpp
std::string strContext = "success":false,"msg":"鎵句笉鍒版ā鏉縞ode:HuoQuSheBeiTongDaoShiJianChuo11"
Json::Reader read();
Json::Value root;
if (NULL == read.parse(strContext, root)) return -1;
雖然字符串不是一個正確的json格式的字符串,但是一樣也會解析出來,導致的結果就是不管使用什麽樣子的字段判斷,都會導致程序崩潰退出,進入到斷言中
解決的方案是指定嚴格的json報文解析規則
std::string strContext = "success":false,"msg":"鎵句笉鍒版ā鏉縞ode:HuoQuSheBeiTongDaoShiJianChuo11"
Json::Reader read(Json::Features::strictMode());
Json::Value root;
if (NULL == read.parse(strContext, root)) return -1;
這樣子就不會出現任何的異常
由於Jsoncpp解析非法json時,會自動容錯成字符類型。對字符類型取下標時,會觸發assert終止進程。
參考
https://www.2cto.com/kf/201409/339350.html
http://blog.csdn.net/sxyizhiren/article/details/18625193
2)Json::Value裏面的函數只有asInt, asUint,並沒有去64位整數的函數,因此在返回64位整數的情況下,可以先轉換成字符串,采用asString,然後再將字符串轉換成64位整型,淡然晚上提供了
一種方案,就是轉換成浮點數,asDouble
參考
http://www.mamicode.com/info-detail-78967.html
jsoncpp使用經驗