后来发现,是因为有特殊字符,“‐” 解析为 “?/” 导致,后面解析出错,下面是代码 一看便知。 但我不明白jsoncpp的作者是是怎么考虑的,所以我还有很多顾虑。
请更熟悉的这方面给给出解答造福各位遇到同样的问题的同胞们。我在这儿,谢谢你了。
bool
Reader::decodeString( Token &token, std::string &decoded )
{
decoded.reserve( token.end_ - token.start_ - 2 );
Location current = token.start_ + 1; // skip '"'
Location end = token.end_ - 1; // do not include '"'
while ( current != end )
{
Char c = *current++;
if ( c == '"' )
break;
else if ( c == '\\' )
{
if ( current == end )
return addError( "Empty escape sequence in string", token, current );
Char escape = *current++;
switch ( escape )
{
case '"': decoded += '"'; break;
case '/': decoded += '/'; break;
case '\\': decoded += '\\'; break;
case 'b': decoded += '\b'; break;
case 'f': decoded += '\f'; break;
case 'n': decoded += '\n'; break;
case 'r': decoded += '\r'; break;
case 't': decoded += '\t'; break;
case 'u':
{
unsigned int unicode;
if ( !decodeUnicodeCodePoint( token, current, end, unicode ) )
return false;
decoded += codePointToUTF8(unicode);
}
break;
default:
decoded += c;
decoded += escape;
//return addError( "Bad escape sequence in string", token, current );//这是原来的代码,现在修改成上面
}
}
else
{
decoded += c;
}
}
return true;
}