版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liangchunjiang/article/details/80899212
因为项目原因需要使用VC6.0解析JSON格式数据,这里首先介绍VC6.0编译JSON解析库的步骤。
首先你必须在http://sourceforge.net/projects/jsoncpp/files/jsoncpp/下载jsoncpp的源代码(.cpp/.h/.inl文件),然后包含到你的工程中:
以下参考博客:https://blog.csdn.net/johnson2008t/article/details/45695669
博文中编译JSON库的时候会有一些错误,但是本文添加到项目编译即生成Json_lib.lib文件,JSON CPP的版本是:jsoncpp-src-0.5.0.tar.gz,如果有遇到问题的朋友欢迎留言交流,谢谢!
第一步:VC6.0新建一个如下图所示:
第二步:将下载下来的“jsoncpp-master.zip”解压,添加src和include目下的文件到项目中,如图所示,
第三步,编译后即可生成Debug和Release需要的lib文件
第四步,新建项目,测试JSON库,目录结构如图所示,
测试demo程序:
封装JSON数据为string
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"
}
解析json数据
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数组操作
封装
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; i<nArraySize; i++)
{
int 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; i<nArraySize; i++)
{
int nID = root["array"][i]["id"].asInt();
std::string strName = root["array"][i]["name"].asString();
}
}
}
::delete readerinfo;
readerinfo = NULL;
}