



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、vc下jsoncpp的使用入門一、摘要json 的全稱為:javascript object notation,顧名思義,json 是用于標記 javascript 對象的,json 官方的解釋為:json 是一種輕量級的數(shù)據(jù)傳輸格式。本文并不詳細介紹 json 本身的細節(jié),旨在討論如何使用 c+ 語言來處理 json。關于 json 更具體的信息,可參見 json 官網(wǎng):。二、jsoncpp 在 windows 下的編譯要使用第三方源碼庫,第一步少不了的就是編譯,將源碼文件編譯成我們方便使用的動態(tài)鏈接庫、靜態(tài)鏈接庫或者靜態(tài)導入庫1。jsconcpp 進行
2、json 解析的源碼文件分布在 include/json、src/lib_json 下。其實 jsoncpp 源碼并不多,為了方便產(chǎn)品管理,此處沒必要將其編譯為動態(tài)鏈接庫或者靜態(tài)導入庫,所以我們選擇使用靜態(tài)鏈接庫2。jsoncpp 已經(jīng)處理的很完善了,所有編譯選項都已經(jīng)配置好,打開makefiles/vs71/jsoncpp.sln 便可以開始編譯(默認是使用 vs2003 編譯器的,打開時直接按照 vs2005 提示轉換即可)。三、靜態(tài)鏈接庫的使用vc中使用靜態(tài)庫的方法#pragma comment(lib, “xxx.lib”)但在編譯你應用程序時可能出現(xiàn)類似如下的錯誤1>libcm
3、td.lib(invarg.obj):error lnk2005: _invoke_watson 已經(jīng)在 msvcrtd.lib(msvcr90d.dll) 中定義1>libcmtd.lib(dbgheap.obj) : error lnk2005: _crtsetcheckcount 已經(jīng)在 msvcrtd.lib(msvcr90d.dll) 中定義1>libcmtd.lib(tidtable.obj) : error lnk2005: _encode_pointer 已經(jīng)在 msvcrtd.lib(msvcr90d.dll) 中定義1>libcmtd.lib(tidtab
4、le.obj) : error lnk2005: _decode_pointer 已經(jīng)在 msvcrtd.lib(msvcr90d.dll) 中定義解決辦法是在編譯jsoncpp的lib時,選擇動態(tài)運行時庫具體含義如下開關 對應的庫 版本 /mdmsvcprt.lib多線程dll的release版本/mddmsvcprtd.lib多線程dll的debug版本/mtlibcpmt.lib多線程靜態(tài)鏈接的release版本/mtdlibcpmtd.lib多線程靜態(tài)鏈接的debug版本四、jsoncpp 使用詳解jsoncpp 主要包含三種類型的 class:value、reader、writer。
5、jsoncpp 中所有對象、類名都在 namespace json 中,包含 json.h 即可。json:value 只能處理 ansi 類型的字符串,如果 c+ 程序是用 unicode 編碼的,最好加一個 adapt 類來適配。1、valuejson:value 是jsoncpp 中最基本、最重要的類,用于表示各種類型的對象,jsoncpp 支持的對象類型可見 json:valuetype 枚舉值。可如下是用 json:value 類:json:value json_temp; / 臨時對象,供如下代碼使用json_temp"name" = json:value(“h
6、uchao”);json_temp"age" = json:value(26);json:value root; / 表示整個 json 對象root"key_string" = json:value(“value_string”); / 新建一個 key(名為:key_string),/賦予字符串值:”value_string”root"key_number" = json:value(12345); / 新建一個 key(名為:key_number),/賦予數(shù)值:12345。root"key_boolean"
7、= json:value(false); / 新建一個 key(名為:key_boolean),/賦予bool值:false。root"key_double" = json:value(12.345); / 新建一個 key(名為:key_double),/賦予 double 值:12.345root"key_object" = json_temp; / 新建一個 key(名為:key_object),/賦予 json:value 對象值。root"key_array".append(“array_string”);/ 新建一個 ke
8、y(名為:key_array),/類型為數(shù)組,對第一個元素賦值為字符串:”array_string”root"key_array".append(1234); / 為數(shù)組 key_array 賦值,對第二個元素賦值為:1234。json:valuetype type = root.type();/ 獲得 root 的類型,此處為 objectvalue 類型。注:跟c+ 不同,javascript 數(shù)組可以為任意類型的值,所以 jsoncpp 也可以。如上幾個用法已經(jīng)可以滿足絕大部分 json 應用了,當然 jsoncpp 還有一些其他同能,比如說設置注釋、比較 json
9、大小、交換 json 對象等,都很容易使用,大家自己嘗試吧。2、writer如上說了 json:value 的使用方式,現(xiàn)在到了該查看剛才賦值內(nèi)容的時候了,查看 json 內(nèi)容,使用 writer 類即可。jsoncpp 的 json:writer 類是一個純虛類,并不能直接使用。在此我們使用 json:writer 的子類:json:fastwriter、json:styledwriter、json:styledstreamwriter。顧名思義,用 json:fastwriter 來處理 json 應該是最快的,下面我們來試試。json:fastwriter fast_writer;std
10、:cout << fast_writer.write(root) << std:endl;輸出結果為:“key_array”:"array_string",1234,”key_boolean”:false,”key_double”:12.3450,”key_number”:12345,”key_object”:“age”:26,”name”:”huchao”,”key_string”:”value_string”再次顧名思義,用 json:styledwriter 是格式化后的 json,下面我們來看看 json:styledwriter 是怎樣格式
11、化的。json:styledwriter styled_writer;std:cout << styled_writer.write(root) << std:endl;輸出結果為:“key_array” : "array_string", 1234 ,“key_boolean” : false,“key_double” : 12.3450,“key_number” : 12345,“key_object” : “age” : 26,“name” : “大中華”,“key_string” : “value_string”3、readerjson:reader 是用于讀取的,說的確切點,是用于將字符串轉換為 json:value 對象的,下面我們來看個簡單的例子。json:reader reader;json:value json_object;const char* json_document = “”age” : 26,”name” : ”huchao”;if (!reader.parse(json_document, jso
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中大mba提前面試題目及答案
- 綏化市重點中學2024-2025學年化學高二第二學期期末學業(yè)水平測試模擬試題含解析
- 新疆巴州三中2025年高二數(shù)學第二學期期末綜合測試試題含解析
- 車輛損傷賠償與車輛維修進度監(jiān)督合同
- 休閑農(nóng)莊場地委托出租及鄉(xiāng)村旅游服務合同
- 物業(yè)公司車庫租賃轉售合同
- 智能化工廠場地租賃合同安全與環(huán)保要求
- 商務區(qū)車場租賃及商業(yè)配套服務合同
- 廣東省廣州市海珠區(qū)2025年八年級下學期期末數(shù)學試題及參考答案
- 實習總結或體會(15篇)
- 肌力分級考試題及答案
- 2025年財務管理全球經(jīng)濟試題及答案
- 轉讓亞馬遜店鋪合同協(xié)議
- 2024年濱州市沾化區(qū)區(qū)屬國有企業(yè)招聘考試真題
- 2025-2030瀝青再生行業(yè)市場現(xiàn)狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 5《有話好好說》(教案)-大象版心理健康四年級
- 2025-2030中國氮氣彈簧行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 制造企業(yè)生產(chǎn)效率提升計劃
- 《老年服務禮儀與溝通》高職養(yǎng)老服務類專業(yè)全套教學課件
- 2025年湖南省初中學業(yè)水平考試模擬考試英語試卷(BEST聯(lián)考)
- 七年級道德與法治教學反思
評論
0/150
提交評論