本文目錄一覽:
- 1、VS2017編譯jsoncpp我出現的問題及怎麼解決的
- 2、c++有類似java gson的開源代碼嗎?
- 3、JSON中數組該如何解析呢?c++中使用jsoncpp
- 4、從源碼構建deb包
- 5、jsoncpp和rapidjson哪個好用
- 6、C++ JsonCpp如何獲取數據
VS2017編譯jsoncpp我出現的問題及怎麼解決的
文件-新建-項目-選c++-win32控制台程序-一步一步向下,完成新建後,再看解決方案管理器,樹狀結構最下面有個「源代碼」文件夾,如果裡面已經有cpp,就粘貼你的代碼,如果沒有,就右鍵-新建cpp源文件,再粘貼代碼,然後才能編譯。如果你都沒看到這些菜單的話說明你的vs2017沒裝c++相關的組件。
c++有類似java gson的開源代碼嗎?
有很多這種庫…如果數據格式固定,自己寫文本轉換也很塊。
json推薦的c++庫
JSONKit.
jsonme–.
ThorsSerializer.
JsonBox.
jvar.
rapidjson.
JSON for Modern C++.
ArduinoJson.
minijson.
jsoncons.
QJson.
jsoncpp.
CAJUN.
libjson.
nosjob.
JSON++.
JSON library for IoT.
qmjson.
JSON Support in Qt.
JsonWax for Qt.
JSON中數組該如何解析呢?c++中使用jsoncpp
JSON是一個輕量級的數據定義格式,比起XML易學易用,而擴展功能不比XML差多少,用之進行數據交換是一個很好的選擇
JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用於標記javascript對象的,詳情參考。
本文選擇第三方庫JsonCpp來解析json,JsonCpp是比較出名的c++解析庫,在json官網也是首推的。
JsonCpp簡介
JsonCpp主要包含三種類型的class:Value Reader Writer。
jsoncpp中所有對象、類名都在namespace json中,包含json.h即可。
注意: Json::Value只能處理ANSI類型的字元串,如果C++程序使用Unicode編碼的,最好加一個Adapt類來適配。
下載和編譯
本文運行環境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + jsoncpp-0.5.0
下載地址是:
解壓之後得到jsoncpp-src-0.5.0文件夾,我們只需要jsoncpp的頭文件和cpp文件,其中jsonscpp的頭文件位於jsoncpp-src-0.5.0includejson,jsoncpp的cpp文件位於jsoncpp-src-0.5.0srclib_json。
這裡我列出我們的工作目錄:
jsoncpp/ //工作目錄
|– include //頭文件根目錄
| |– json //json頭文件,對應jsoncpp-src-0.5.0includejson
|– src //cpp源碼文件根目錄
|– json //jsoncpp源碼文件,對應jsoncpp-src-0.5.0srclib_json
|– main.cpp //我們的主函數,調用jsoncpp的示例代碼
|– makefile //makefile,不用我們多說了吧,不懂請看我博客的makefile最佳實踐
反序列化Json對象
假設有一個json對象如下:
{ “name”: “json″, “array”: [ { “cpp”: “jsoncpp” }, { “java”: “jsoninjava” }, { ”php”: “support” } ] }
我們要實現這個json的反序列號代碼如下:
voidreadJson() { usingnamespacestd; std::stringstrValue = “{\”name\”:\”json\”,\”array\”:[{\”cpp\”:\”jsoncpp\”},{\”java\”:\”jsoninjava\”},{\”php\”:\”support\”}]}”; Json::Reader reader; Json::Value value; if(reader.parse(strValue, value)) { std::stringout= value[“name”].asString(); std::cout outstd::endl; constJson::Value arrayObj = value[“array”]; for(unsigned inti = 0;i arrayObj.size(); i++) { if(!arrayObj[i].isMember(“cpp”)) continue; out= arrayObj[i][“cpp”].asString(); std::cout out; if(i != (arrayObj.size() – 1)) std::cout std::endl; } } }
序列化Json對象
voidwriteJson() { usingnamespacestd; Json::Value root; Json::Value arrayObj; Json::Value item; item[“cpp”] = “jsoncpp”; item[“java”] = “jsoninjava”; item[“php”] = “support”; arrayObj.append(item); root[“name”] = “json”; root[“array”] = arrayObj; root.toStyledString(); std::stringout= root.toStyledString(); std::cout outstd::endl; }
從源碼構建deb包
以jsoncpp為例,從源碼構建deb包
deb包是linux某些發行版本的一種安裝包。
deb包的包含2部分:
下面主要介紹control文件內容:
需要安裝到系統的文件,一般主要是etc、usr等
構建deb包之前,需要先根據源碼編譯jsoncpp的動態庫文件(下面只編譯動態庫)
至此,jsoncpp的動態庫和頭文件安裝到jsoncpp_install
至此,deb包構建完成,可以通過下面指令查看其中deb包的內容
安裝完成後,可以通過下面查看安裝了哪些內容
至此,deb包構建完成,構建的腳本如下:
jsoncpp和rapidjson哪個好用
rapidjson介面設計的不好,不好用,雖然只需要包含頭文件,另外主要也是用了其他內建json類型的語言給慣壞了,jsoncpp要編譯成庫就更加不方便了。最近工作需要用json,github上找了下,這個nlohmann/json好,只需要一個hpp文件,介面設計的比較易用,整體評價也不錯,Linux下面gcc要4.9
C++ JsonCpp如何獲取數據
JSON是一個輕量級的數據定義格式,比起XML易學易用,而擴展功能不比XML差多少,用之進行數據交換是一個很好的選擇
JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用於標記javascript對象的,詳情參考
。
選擇第三方庫JsonCpp來解析json,JsonCpp是比較出名的c++解析庫,在json官網也是首推的。
JsonCpp簡介
JsonCpp主要包含三種類型的class:Value Reader Writer。
jsoncpp中所有對象、類名都在namespace json中,包含json.h即可。
注意: Json::Value只能處理ANSI類型的字元串,如果C++程序使用Unicode編碼的,最好加一個Adapt類來適配。
下載和編譯
本文運行環境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + jsoncpp-0.5.0
下載地址是:
解壓之後得到jsoncpp-src-0.5.0文件夾,我們只需要jsoncpp的頭文件和cpp文件,其中jsonscpp的頭文件位於jsoncpp-src-0.5.0includejson,jsoncpp的cpp文件位於jsoncpp-src-0.5.0srclib_json。
這裡我列出我們的工作目錄:
jsoncpp/ //工作目錄
|– include //頭文件根目錄
| |– json //json頭文件,對應jsoncpp-src-0.5.0includejson
|– src //cpp源碼文件根目錄
|– json //jsoncpp源碼文件,對應jsoncpp-src-0.5.0srclib_json
|– main.cpp //我們的主函數,調用jsoncpp的示例代碼
|– makefile //makefile,不用我們多說了吧,不懂請看我博客的makefile最佳實踐
反序列化Json對象
假設有一個json對象如下:
{ “name”: “json″, “array”: [ { “cpp”: “jsoncpp” }, { “java”: “jsoninjava” }, { ”php”: “support” } ] }
我們要實現這個json的反序列號代碼如下:
voidreadJson() { usingnamespacestd; std::stringstrValue = “{\”name\”:\”json\”,\”array\”:[{\”cpp\”:\”jsoncpp\”},{\”java\”:\”jsoninjava\”},{\”php\”:\”support\”}]}”; Json::Reader reader; Json::Value value; if(reader.parse(strValue, value)) { std::stringout= value[“name”].asString(); std::cout outstd::endl; constJson::Value arrayObj = value[“array”]; for(unsigned inti = 0;i arrayObj.size(); i++) { if(!arrayObj[i].isMember(“cpp”)) continue; out= arrayObj[i][“cpp”].asString(); std::cout out; if(i != (arrayObj.size() – 1)) std::cout std::endl; } } }
序列化Json對象
voidwriteJson() { usingnamespacestd; Json::Value root; Json::Value arrayObj; Json::Value item; item[“cpp”] = “jsoncpp”; item[“java”] = “jsoninjava”; item[“php”] = “support”; arrayObj.append(item); root[“name”] = “json”; root[“array”] = arrayObj; root.toStyledString(); std::stringout= root.toStyledString(); std::cout outstd::endl; }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/290697.html