C++ 当我尝试强制转换Int64时,poco库出现错误强制转换异常
我为解析JSON字符串编写了一些代码。 我有时会有糟糕的演员阵容。 在我的JSON字符串1中。2.不要引发异常和3。4.引发异常 两组之间的区别是1。2'的BCodeW在远程范围内,3'的BCodeW在远程范围内。4.的B代码在Int64范围内 为什么演员会提出例外 我为坏的强制转换异常编写了一些保护代码,但我想知道异常的原因 谢谢你的阅读。 我的环境在下面C++ 当我尝试强制转换Int64时,poco库出现错误强制转换异常,c++,json,exception,casting,poco-libraries,C++,Json,Exception,Casting,Poco Libraries,我为解析JSON字符串编写了一些代码。 我有时会有糟糕的演员阵容。 在我的JSON字符串1中。2.不要引发异常和3。4.引发异常 两组之间的区别是1。2'的BCodeW在远程范围内,3'的BCodeW在远程范围内。4.的B代码在Int64范围内 为什么演员会提出例外 我为坏的强制转换异常编写了一些保护代码,但我想知道异常的原因 谢谢你的阅读。 我的环境在下面 bool CUBIUtils::ParseAddressResult( llong& _BCodeW, char* _szPO
bool CUBIUtils::ParseAddressResult( llong& _BCodeW, char* _szPOI, char* _szJibun, char* _szAPIResult )
{
JSON::Parser parser;
try
{
JSON::Object::Ptr _object = parser.parse(_szAPIResult).extract<JSON::Object::Ptr>();
if ( NULL == _object)
{
formatlog( LOG_ERROR, "JSON parsing failed");
return false;
}
formatlog( LOG_DEBUG, "CUBIUtils::%s(%d) AddrSrc: %s", __func__, __LINE__, _szAPIResult);
_BCodeW = 0;
try
{
_BCodeW = _object->get("BCodeW").extract<Int64>();
}
catch(exception &_e)
{
_BCodeW = _object->get("BCodeW").extract<int>();
}
strcpy( _szPOI, _object->get("poi").extract<std::string>().c_str());
strcpy( _szJibun, _object->get("jibun").extract<std::string>().c_str());
}
catch(exception &e)
{
formatlog( LOG_ERROR, "CUBIUtils::%s(%d) JSON parsing Exception. %s", __func__, __LINE__, e.what());
return false;
}
return true;
}
g++GCC 4.4.7 20120313红帽4.4.7-11
使用poco::JSON的poco-1.6.0
CentOS 6.6最终版
下面是我的JSON字符串示例
{y:37.56376,x:126.97287,POY:37.56368611111,poiX:126.973022222,jibunY:37.5638055556,jibunX:126.9728583333,B代码:1114016700,poi:…,jibun:…}
{y:37.59771,x:127.041493,POY:37.5976055556,poiX:127.041725,jibunY:37.59754722222,jibunX:127.041766667,B代码:1129013600,poi:…,jibun:…}
{y:36.760035,x:127.250362,POY:36.7599055556,poiX:127.25036111111,jibunY:36.760119444444,jibunX:127.250408333,B代码:4413125029,poi:…,jibun:…}
{y:36.129513,x:128.34381,POY:36.128672222222,poiX:128.34373888889,jibunY:36.12973888889,jibunX:128.34425833333,B代码:4719010200,poi:…,jibun:…}
我的代码如下
bool CUBIUtils::ParseAddressResult( llong& _BCodeW, char* _szPOI, char* _szJibun, char* _szAPIResult )
{
JSON::Parser parser;
try
{
JSON::Object::Ptr _object = parser.parse(_szAPIResult).extract<JSON::Object::Ptr>();
if ( NULL == _object)
{
formatlog( LOG_ERROR, "JSON parsing failed");
return false;
}
formatlog( LOG_DEBUG, "CUBIUtils::%s(%d) AddrSrc: %s", __func__, __LINE__, _szAPIResult);
_BCodeW = 0;
try
{
_BCodeW = _object->get("BCodeW").extract<Int64>();
}
catch(exception &_e)
{
_BCodeW = _object->get("BCodeW").extract<int>();
}
strcpy( _szPOI, _object->get("poi").extract<std::string>().c_str());
strcpy( _szJibun, _object->get("jibun").extract<std::string>().c_str());
}
catch(exception &e)
{
formatlog( LOG_ERROR, "CUBIUtils::%s(%d) JSON parsing Exception. %s", __func__, __LINE__, e.what());
return false;
}
return true;
}
这里的问题不在于JSON解析和/或数据提取。它位于比较行中:
if (NULL == _object)
该行将导致抛出BadCastException
原因是运算符==解析为
inline bool operator == (const Poco::Int32& other, const Var& da)
以及Poco::JSON::Object::Ptr到Poco::Int32的抛出
将有问题的行替换为
if (_object.isNull())
一切都会好起来。这里的问题不在于JSON解析和/或数据提取。它位于比较行中:
if (NULL == _object)
该行将导致抛出BadCastException
原因是运算符==解析为
inline bool operator == (const Poco::Int32& other, const Var& da)
以及Poco::JSON::Object::Ptr到Poco::Int32的抛出
将有问题的行替换为
if (_object.isNull())
一切都会好起来。我试图找到答案,但得到了一些答案。1.如果_object.isNull您提到的是必需的-如果bcodew值为null,则引发异常。2.我必须使用转换比提取我试图找到答案,我得到了一些答案。1.如果_object.isNull您提到的是必需的-如果bcodew值为null,则引发异常。2.我必须使用转换而不是提取