使用C++和别的语言做交互比较常用的一种数据操作方式就是json。可以到GitHub上下载对应C++的json库源码,我自己下了一套之前的版本,可以正常使用。jsoncpp-src
#include "json/json.h"
#ifdef _DEBUG
#pragma comment(lib,"./lib/json_vc71_libmtd.lib")
#else
#pragma comment(lib,"./lib/json_vc71_libmt.lib")
#endif
std::string DataToJson()
{
Json::FastWriter writerinfo;
Json::Value writevalueinfo;
writevalueinfo["id"]=123;
writevalueinfo["time"]="2017.08.30 00:00:00";
Json::Value writedata;
writedata["count"] = 1;
writedata["name"] = "cpp";
writevalueinfo["data"]=writedata;
std::string strEmail = writerinfo.write(writevalueinfo);
return strEmail;
}
示例json:
{
"data": {
"count": 1,
"name": "cpp"
},
"id": 123,
"time": "2017.08.30 00:00:00"
}
void TranslateJson(const string strData)
{
// 解析json用Json::Reader
Json::Reader *readerinfo = new Json::Reader(Json::Features::strictMode());
// Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array...
Json::Value root;
if (readerinfo->parse(strData, root))
{
if (root["id"].isInt())
{
int nID = root["id"].asInt();
}
if (root["time"].isString())
{
std::string strTime = root["time"].asString();
}
if (root["data"]["count"].isInt())
{
int nDataCount = root["data"]["count"].asInt();
}
if (root["data"]["name"].isString())
{
std::string strDataName = root["data"]["name"].asString();
}
}
::delete readerinfo;
readerinfo = NULL;
}
Json::Value arrayObj; // 构建对象
for (int i = 0; i < 3; i++)
{
Json::Value new_item;
new_item["id"] = i;
new_item["name"] = "test";
arrayObj.append(new_item); // 插入数组成员
}
示例json:
[
{
"id": 0,
"name": "test"
},{
"id": 1,
"name": "test"
},
{
"id": 2,
"name": "test"
}
]
arrayObj.append(new_item); 改为 arrayObj["array"].append(new_item);
示例json:
{
"array": [
{
"id": 0,
"name": "test"
},
{
"id": 1,
"name": "test"
},
{
"id": 2,
"name": "test"
}
]
}
解析
void TranslateJson(const string strData)
{
// 解析json用Json::Reader
Json::Reader *readerinfo = new Json::Reader(Json::Features::strictMode());
// Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array...
Json::Value root;
if (readerinfo->parse(strData, root))
{
//arrayObj.append(new_item);
if (root.isArray())
{
int nArraySize = root.size();
for (int i=0; iint nID = root[i]["id"].asInt();
std::string strName = root[i]["name"].asString();
}
}
// arrayObj["array"].append(new_item);
if (root["array"].isArray())
{
int nArraySize = root["array"].size();
for (int i=0; iint nID = root["array"][i]["id"].asInt();
std::string strName = root["array"][i]["name"].asString();
}
}
}
::delete readerinfo;
readerinfo = NULL;
}