jsoncpp 常用方法

        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
        以下是一段http 请求返回的数据结构,whenreadover是填充的json结构,为解决跨域的问题,这里不是重点,先跳过,这里只是演示如何从result中读取数据。
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;
	}
}

猜你喜欢

转载自blog.csdn.net/moyebaobei1/article/details/81045975