json是一种轻量级的数据结构,使用统一的数据格式,在不同平台,不同语言,不同应用之间交换数据。jsoncpp是一个开源库,是使用C++语言对json数据结构的一种实现。
JsonCpp是一个开源库
下载地址:https://github.com/open-source-parsers/jsoncpp
文档地址:http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html
以上链接参考博客:json下载地址/文档地址
C++ 项目中如何引入不做详细讨论,网上有很多说明,这里只对个人遇到的部分使用情况做一下说明。
- json object 内部嵌套 json object
whenreadover([{
"state":200,
"result": {
"ext_str" : "",
"file" : "/upload/trainer/20180714/b5666deca8e75525857ef42ae7a32f88.jpg",
"media_file" : "https://timing.1qjd.com/upload/trainer/20180714/b5666deca8e75525857ef42ae7a32f88.jpg",
"media_file_from" : "",
"media_guid" : "8aa62e92-1179-1d2b-9abd-dc4294834114"
}
}])
这里需要先判断result类型,然后直接赋值一个json::value 这里和基本数据类型赋值方式不同,使用方式上感觉前后不统一,容易让人困惑,需要注意一下。直接上代码
{
Json::CharReaderBuilder builder;
builder["collectComments"] = false;
JSONCPP_STRING errs;
Json::Value jRoot;
Json::CharReader* reader = builder.newCharReader();
if (!reader->parse(strPure.c_str(), strPure.c_str() + strPure.size(), &jRoot, &errs)) //从jsonStr中读取数据到jsonRoot
{
m_iState = 212;
return;
}
int iCode = jRoot["code"].asInt();
Json::ValueType type = jRoot["result"].type();
if (type == Json::objectValue)
{
Json::Value subRet = jRoot["result"];
string strGuid = subRet["media_guid"].asString();
string strUrl = subRet["media_file"].asString();
m_strImgBase64 = subRet.toStyledString();
m_iState = 200;
}
}