本文主要是介绍C++ 使用Json封装数据和解析数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用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::ReaderJson::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::ReaderJson::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封装数据和解析数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!