您的位置:首页 > 编程语言 > C语言/C++

C++ 使用Json封装数据和解析数据

2017-08-30 12:06 567 查看
使用C++和别的语言做交互比较常用的一种数据操作方式就是json。可以到GitHub上下载对应C++的json库源码,我自己下了一套之前的版本,可以正常使用。jsoncpp-src

编译出来的库名:json_vc71_libmtd.lib(debug) | json_vc71_libmt.lib(release)

需要包含的头文件: jsoncpp-src(对应源码)/include/json (该目录下所有文件)

调用库方式

#include "json/json.h"
#ifdef _DEBUG
#pragma comment(lib,"./lib/json_vc71_libmtd.lib")
#else
#pragma comment(lib,"./lib/json_vc71_libmt.lib")
#endif


封装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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ json