相信大家在编程中会经常接触Json,比如发送Http请求时通过Json来请求数据等等。
首先我要告诉大家的是,在C++中,有现成的Json使用的库,如:lib_json.lib,大家需要的自取后进行编译生成https://github.com/open-source-parsers/jsoncpp/archive/0.10.6.zip。
下面我就通过一个小例子来总结下我所用Json时所遇到的问题。
例子:
{
"group" :{
"allOf":[
{
"state":{
"EQ":[
"Published"
]
}
}
]
},
"start":0,
"limit":20
}
在这个例子中,基本囊括了所有Json串的所有用法,例如"start":0,就是一个简单的数字的赋值的语法:Json::Value value;//定义一个json值的对象
value["start"] = Json::Value(0);// 对象中的元素进行赋值。
“group”是一个比较复杂的结构,总的来看:它里面有一个叫allof的数组元素,数组中又有一个state的值,state中的值是一个EQ的数组,数组中有一个Published的值。
对于复杂的结构,可以定义“临时对象”进行赋值!
那么我要告诉大家的是,对于数组类型,使用append进行赋值,对于值类型直接使用=即可。
那么基于这个原则,上面这个例子可以写为:
Json::Value group;
Json::Value allOf;
Json::Value state;
Json::Value EQ;
EQ.append(Json::Value("Published"));
state["EQ"] = EQ;
allOf["state"] = state;
group["allOf"].append(allOf);
value["group"] = group;
那么对于整个结构,完整的定义应该如下:
Json::Value value;
value["start"] = Json::Value(0);
value["limit"] = Json::Value(20);
Json::Value group;
Json::Value allOf;
Json::Value state;
Json::Value EQ;
EQ.append(Json::Value("Published"));
state["EQ"] = EQ;
allOf["state"] = state;
group["allOf"].append(allOf);
value["group"] = group;
注意:对于同一级别的数值,顺序没有影响!