当JSON中有illigal字符时,如何防止JSON解析器崩溃?

dee*_*ith 5 c c++ json rapidjson

由于一些通信错误,我有时会收到带有一些非法字符的JSON字符串: "{messageType\" : \"Test1\", \"from\" : \"F2D0B5C6-9875-46B5-8D4F\"}????1"

这些非法字符使我的JSON解析器中断.我正在使用RapidJSON JSON解析器(C/C++).你能告诉我是否有一种方法可以从字符串中过滤掉这些不需要的字符,并验证json字符串的完整性.

Mil*_*Yip 5

它不是解析器中的错误.解析器在null终止符为空格之前验证尾随字符.并在发生错误时返回错误代码.但是如果没有空终止符,则可能导致分段错误,类似于strlen().

在较新版本的RapidJSON中,有一个kParseStopWhenDoneFlag.启用后,解析器将在完整的JSON值后停止读取尾随字符.例如

Document d;
const char* s =
    "{messageType\" : \"Test1\", \"from\" : \"F2D0B5C6-9875-46B5-8D4F\"}????1";
d.Parse<kParseStopWhenDoneFlag>(s);
assert(!d.HasParseError());
Run Code Online (Sandbox Code Playgroud)

通过使用此标志,解析器将在读取后停止},而不会报告错误.

它尚未在指南中记录.请参阅https://github.com/miloyip/rapidjson/pull/83中的讨论