Json簡介
JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式,可讀性強,易擴展,很適合做通信協議,下面主要介紹一款C++的Json庫:Jsoncpp.
用法簡介
數據類型
Jsoncpp中,封裝類Json::Value,既可以用於表示Json對象,也可以用於表示Json數組(也叫列表或者集合)。使用起來比較方便;當作數組使用時,在實例化時需要指定其類型如下:
Json::Value array(Json::arrayValue);
這樣就創建了一個空的json數組,數組的成員可以是單個對象,也可以是複雜對象,如下:
簡單成員:
[ "1", "2", "3" ] //字符串列表
[ 1, 2, 3 ] //整數列表
也可以是:
"test":[
{
"no":1,
"val": 21
},
{
"no":2,
"val": 21
},
{
"no":3,
"val": 32,
"msg": "for test" //列表中每個對象的內容可以不一樣
}
]
解析如下:
對象很簡單,就是key-value的形式;value的數據類型可以是整型、浮點、字符串。
{
“no”:1,
"name": "Tom"
}
C++代碼示例
#include <iostream>
#include "json/json.h"
#include <string>
using namespace std;
int main()
{
//1.創建json字符串
cout << "1.creat json string----------------------------------------"<<endl;
Json::Value jsonObj;
jsonObj["id"] = 1; //int
jsonObj["name"] = "Fens";//string
jsonObj["age"] = 18; //int
Json::Value jsonArray(Json::arrayValue); //creat an array
jsonArray[0] = "13633838481"; //給數組添加數據,注:這兩個手機號是上學時用的,現在已經不是我的了^_^
jsonArray[1] = "15617051150";
jsonObj["phone"]=jsonArray; //將數組添加到對象中
Json::StyledWriter styleWriter; //有個格式
Json::FastWriter fastWriter; //壓縮,無格式
cout << "styleWriter json string: "<<styleWriter.write(jsonObj)<<endl;
cout << "-----------------------------------------------------------"<<endl;
cout << "fastWriter json string: "<<fastWriter.write(jsonObj)<<endl;
//2.解析json字符串
cout << "2.decode json string----------------------------------------"<<endl;
const string jsonString = "{\"id\":1,\"name\":\"fens\",\"phone\":[\"15617051150\",\"13833838481\"],\"school\":[{\"type\":\"primary\",\"name\":\"夏邑縣第一實驗小學\",\"address\":\"河南省夏邑縣文化路\"},{\"type\":\"middle\",\"name\":\"夏邑縣第三高級中學\",\"address\":\"河南省夏邑縣建設路孔祖大道\"},{\"type\":\"college\",\"name\":\"鄭州大學\",\"address\":\"河南省鄭州市高新技術開發區科學大道\"}]}";
Json::Reader reader;
Json::Value rootObj;
reader.parse(jsonString, rootObj);
cout <<"read json string: "<<rootObj.toStyledString()<<endl;
return 0;
}
上面代碼是介紹的Json字符串的解析與生產,如果需要讀寫文件,只需要把讀取到的字符串交給Json::Reader,或者把Json::styleWriter或者Json::fastWriter序列化後的字符串寫入文件即可。
代碼執行輸出結果
1.creat json string----------------------------------------
styleWriter json string: {
"age" : 18,
"id" : 1,
"name" : "Fens",
"phone" : [ "13633838481", "15617051150" ]
}
-----------------------------------------------------------
fastWriter json string: {"age":18,"id":1,"name":"Fens","phone":["13633838481","15617051150"]}
2.decode json string----------------------------------------
read json string: {
"id" : 1,
"name" : "fens",
"phone" : [ "15617051150", "13833838481" ],
"school" : [
{
"address" : "河南省夏邑縣文化路",
"name" : "夏邑縣第一實驗小學",
"type" : "primary"
},
{
"address" : "河南省夏邑縣建設路孔祖大道",
"name" : "夏邑縣第三高級中學",
"type" : "middle"
},
{
"address" : "河南省鄭州市高新技術開發區",
"name" : "鄭州的大學",
"type" : "college"
}
]
}
JSON在線解析及格式化驗證 - JSON.cn
Json在線解析網站: https://www.json.cn/#
Jsoncpp源碼及示例代碼: https://gitee.com/fenstec/demo_code.git