Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当我尝试强制转换Int64时,poco库出现错误强制转换异常_C++_Json_Exception_Casting_Poco Libraries - Fatal编程技术网

C++ 当我尝试强制转换Int64时,poco库出现错误强制转换异常

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

我为解析JSON字符串编写了一些代码。 我有时会有糟糕的演员阵容。 在我的JSON字符串1中。2.不要引发异常和3。4.引发异常

两组之间的区别是1。2'的BCodeW在远程范围内,3'的BCodeW在远程范围内。4.的B代码在Int64范围内

为什么演员会提出例外

我为坏的强制转换异常编写了一些保护代码,但我想知道异常的原因

谢谢你的阅读。

我的环境在下面

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.我必须使用转换而不是提取