由于一些通信错误,我有时会收到带有一些非法字符的 JSON 字符串:
"{messageType\":\"Test1\",\"from\":\"F2D0B5C6-9875-46B5-8D4F\"}����1"
这些非法字符使我的 JSON 解析器崩溃。我正在使用 RapidJSON JSON 解析器 (C/C++)。 你能告诉我是否有一种方法可以从字符串中过滤掉这些不需要的字符并验证 json 字符串的完整性。
最佳答案
这不是解析器中的错误。解析器验证空终止符之前的尾随字符是否为空格。并在发生错误时返回错误代码。但是如果没有空终止符,可能会导致段错误,类似于strlen()
。
在较新版本的 RapidJSON 中,有一个 kParseStopWhenDoneFlag
。启用后,解析器将停止读取完整的 JSON 值后的尾随字符。例如
Document d;
const char* s =
"{messageType\" : \"Test1\", \"from\" : \"F2D0B5C6-9875-46B5-8D4F\"}����1";
d.Parse<kParseStopWhenDoneFlag>(s);
assert(!d.HasParseError());
通过使用此标志,解析器将在读取 后停止,而不会报告错误。
指南中尚未记录。请引用https://github.com/miloyip/rapidjson/pull/83中的讨论
关于c++ - 当 JSON 中存在非法字符时,如何防止 JSON 解析器崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775819/