1. 程式人生 > >jsoncpp使用經驗

jsoncpp使用經驗

解析 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使用經驗