1、首先是引入jsoncpp库,如下图所示:
2、代码如下:
#include "stdafx.h"
#include "JsonCPPTest.h"
/*
{
"msg":{
"count":5,
"data":[
{"datId":1,"datType":3,"station":"json test 1","valid":1,"value":223.25999999999999},
{"datId":2,"datType":3,"station":"json test 2","valid":1,"value":223.25999999999999},
{"datId":3,"datType":3,"station":"json test 3","valid":1,"value":223.25999999999999},
{"datId":4,"datType":3,"station":"json test 4","valid":1,"value":223.25999999999999},
{"datId":5,"datType":3,"station":"json test 5","valid":1,"value":223.25999999999999}
],
"type":"post"
}
}
*/
//生成以上json字符串
string MakeJson()
{
Json::Value json_temp;
json_temp["type"]=Json::Value("post");
int count=5;
json_temp["count"]=Json::Value(count);
Json::Value jsonV;
CString str;
for (int i=1;i<=count;i++)
{
Json::Value vle;
Json::Value::UInt dwOid=i;
vle["datId"]=Json::Value(dwOid);
vle["valid"]=Json::Value(1);
vle["datType"]=Json::Value(3);
str.Format("json test %d",i);
vle["station"]=Json::Value(str);
vle["value"]=Json::Value(223.26);
jsonV["data"].append(vle);
}
json_temp["data"]=jsonV["data"];
Json::Value root;
root["msg"]=json_temp;
Json::FastWriter fast_writer;
string json=fast_writer.write(root);
return json;
}
//解析MakeJson()生成的json字符串
void ParseJsonStr(string json)
{
Json::Reader reader;
Json::Value root;
if (!reader.parse(json, root))//将json字符串转换成一个json对象root,如果成功返回true,如果失败返回false
{
return ;
}
Json::Value Obj = root["msg"];//获取一个对象
int count=Obj["count"].asInt();//从对象中获取一个key的值
string type=Obj["type"].asString();//从对象中获取一个key的值
Json::Value arrayObj=Obj["data"];//从对象中获取一个数据
for (int i=0;i<arrayObj.size();i++)
{
Json::Value tmp=arrayObj[i];//从数组中获取一个对象
int datId=tmp["datId"].asInt();//从对象中获取一个key的值
int datType=tmp["datType"].asInt();
string station=tmp["station"].asString();
int valid=tmp["valid"].asInt();
double value=tmp["value"].asDouble();
}
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
TRACE("%s\n",MakeJson().c_str());
ParseJsonStr(MakeJson());
return 0;
}
1135

被折叠的 条评论
为什么被折叠?



