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;
}