jsoncpp程式設計介面簡介
jsoncpp是乙個使用c++語言實現的、物件導向的json庫,以靜態庫的形式提供,使用非常簡單。其提供的介面中有3個核心類,分別為:reader、writer、value。
reader類:負責從字串或者輸入流中載入json文件,並進行解析,生成代表json文件的value物件。
writer類:負責將記憶體中的value物件轉換成json文件,輸出到檔案或者是字串中。
value類:其物件代表乙個json值,既可以代表乙個文件,也可以代表文件中乙個值。如同json中定義的「值」一樣,value是遞迴的。
一、解析json文件
解析乙個json文件的大致過程如下:
//生命頂級value物件
json::value root;
//讀取文件:
std::string strdoc = readfromfile(…);
//宣告reader物件
json::reader _reader;
//解析json文件,生成json值
_reader.paser(strdoc, root);
/*從root中提取資料,基本模式如下函式所示,
其中param out只是抽象的佔位符,代表用來儲存從value中提取的資料物件,並不是乙個實際實現的類。*/
getvaluefromtree( param out, json::value &value )
}
break;
case json::objectvalue:
}
break;
default:
} }
不同定義的json文件,儲存不同的資料,對於解析之後的資料,也需要使用不同的資料結構來儲存。比如下面的結構體:
struct user
serverinfo;
int skillids[3];
};
可使用如下定義的json文件表示:
,
"skillids":
[
1,3,5
] }
}
二、從記憶體中建立value物件
在需要將記憶體資料轉換為json時,就需要從記憶體中建立乙個value物件,然後再轉化為文字進行輸出。從記憶體中建立value物件也是常用的操作,對於需要轉化為json文件表示的資料結構,都需要定義乙個tojson成員函式:
bool tojson(json::value& value);
其內部實現模式為:
(1)如果是乙個簡單的value值,如布林、數值、空值、字串等,則直接使用建構函式建立value。如:value(datatype);
(2)如果要建立乙個物件型別的value,首先使用value root(valuetype type = objectvalue)宣告乙個空的、型別為物件的value物件。
然後使用類似於root[「type」] = 「user_info」的表示式,往root中新增屬性(key/value對)。
,
"skillids":
[
1,3,5
] }
}
需要如下**:
//宣告object型別的物件,根物件
value root(objectvalue);
//新增type屬性,這裡隱含自動型別轉換,將string轉化為value
root[「type」] = 「user_info」;
//下面建立data子物件
value data(objectvalue);
data[「id」] = 1;
data[「name」] = 「spring」;
value _server(objectvalue);
_server[「homeserver」] = 1001;
_server[「vistserver」] = 1003;
data[「server」] = _server;
value _skillids(objectvalue);
data[「skillids」] = _skillids;
root[「data」] = data;
至此,root物件構建完畢。
三、value值轉換為json文件
jsoncpp提供了幾個類可以完成這個任務,雖然稍有不同,但基本一樣,盡在排版風格上稍有差異。以簡單的fastwriter為例:
json:: fastwriter writer;
string _jsondoc = writer.write( root );
_jsondoc中即包含了輸出的json格式的文件。
Jsoncpp的安裝配置及示例使用
jsoncpp安裝 jsoncpp 是乙個 c 封裝的 json 包,跨平台支援 windows linux unix 等多系統。linux 下面編譯需要使用到 cmake 進行編譯。jsoncpp原始碼 git clone 進到目錄 cd jsoncpp master 建立目錄 mkdir p b...
第三方庫的使用 jsoncpp安裝與測試
安裝步驟 jsoncpp在ubuntu18.14 的安裝 大概分為以下步驟 2 解壓縮 如果是git clone 就不需要解壓了 3 進入資料夾,建立 build資料夾,然後進行編譯安裝 編譯安裝的過程如下 使用了cmake mkdir build cd build cmake sudo make ...
AJAX介面及普通AJAX使用及示例
以下為示例 1 ajax介面 var ajax function this.issync function 遠端請求ajax 位址 this.setremoteurl function url 獲取url位址 var getcacheparameterstring function return 設...