C++技术之路:JsonCpp的应用

C++库,允许操作JSON值,包括与字符串串行化和序列化。jsoncpp 主要包含三种类型的 class:Value、Reader、Writer。jsoncpp 中所有对象、类都在 namespace Json 中,包含 json.h 即可。
Json::Value 只能处理 ANSI 类型的字符串。
下面用实际代码讲述JsonCpp的具体用法。
1、判断是否是Object类型:

bool Json_IsMember(const Json::Value &jsObj, string strField)
{
	try
	{
		if( !jsObj.isMember(strField) )
			return false;
	}catch (...)
	{
		return false;
	}
	return true;
}

2、获取string类型数据:

string Json_GetStr( const Json::Value &jsObj,string strField)
{
	string strVV = "";
	if(jsObj.isMember(strField) && jsObj[strField].isString())
	{
		strVV = jsObj[strField].asString();
	}
	return strVV;
}
const char* Json_GetPtrStr(const Json::Value &jsObj,string strField)
{
	if( !jsObj.isMember(strField) )
		return 0;
	return jsObj[strField].asCString();
}

3、获取int类型数据:

int Json_GetInt( const Json::Value &jsObj,string strField)
{
	int iVV = 0;
	if( !jsObj.isMember(strField) )
		return iVV;
	try
	{
		if(jsObj[strField].isNumeric())
		{
			iVV = jsObj[strField].asInt();
		}
		else if(jsObj[strField].isString())
		{
			string strVV = jsObj[strField].asString();
			iVV = atoi(strVV.c_str());
		} 
	} catch (...)
	{
		return 0;
	}
	return iVV;
}

4、获取Bool类型数据:

bool Json_GetBool(const Json::Value &jsObj,string strField)
{
	if(!jsObj.isMember(strField))
		return false;
	if(jsObj[strField].isBool())
		return jsObj[strField].asBool();
	int iAa = Json_GetInt(jsObj,strField);
	return iAa>0;
}

5、获取long long(64位整数)

long long CJsonPub::Json_GetInt64( Json::Value &jsObj,string strField)
{
    long long iVV = 0;
	try
	{
		if( !jsObj.isMember(strField) )
			return iVV;

		if(jsObj[strField].isNumeric())
			iVV = jsObj[strField].asInt64();
		else if (jsObj[strField].isString())
		{
			string strVV = jsObj[strField].asString();

			iVV = atoll(strVV.c_str());
		}else{
			return iVV;
		}
	}catch(...)
	{
		return 0;
	}

	return iVV;
}

6、将json转string数据

string JsonToString(const Json::Value *pJsItem)
{
	if( !pJsItem )
		return "";
	Json::FastWriter json_writer;
	string  strJsonObj = json_writer.write( *pJsItem );
	return strJsonObj;
}

7、将string转json数据

int StrToJsonB( const char *pBuffer,Json::Value &jsDes )
{
	try
	{
		if( 0==pBuffer )
			return 5656563;
		if( 0==strlen(pBuffer) )
			return 9899656;
		Json::Reader json;
		if( !json.parse( pBuffer,jsDes) )
		{
			return 4654656;
		}
	}catch (...)
	{
		return 21323230;
	}
	return 0;
}
int StrToJson( string &strJs,Json::Value &jsDes )
{
	if( strJs.empty() )
		return 5656562;
	Json::Reader json;
	if( !json.parse( strJs,jsDes) )
	{
		return 9898956;
	}
	return 0;
}
发布了11 篇原创文章 · 获赞 0 · 访问量 299

猜你喜欢

转载自blog.csdn.net/slyw77slyw/article/details/105207708