Poco框架JSON对象序列化出现斜杠转义异常,求解决方案
解决Poco JSON序列化时斜杠被自动转义的问题
这其实是Poco JSON库的默认行为——为了兼容某些场景(比如避免和HTML标签中的</>冲突),它会自动把正斜杠/转义成\/。虽然根据JSON规范,转义后的\/和原始的/都是合法的,绝大多数JSON解析器都能正确处理,但如果你确实需要输出不转义的斜杠,可以通过调整序列化选项来实现。
解决方案代码
把原来直接调用obj.stringify(ss8)的代码,替换成带自定义选项的序列化方式:
#include "Poco/JSON/Stringifier.h" // ... 你的其他业务代码 ... std::stringstream ss8; // 移除默认选项中的ESCAPE_SLASHES,禁止转义正斜杠 Poco::JSON::Stringifier::stringify( obj, ss8, 0, // 缩进值,0表示不格式化压缩输出 Poco::JSON::Stringifier::OPTIONS_DEFAULT & ~Poco::JSON::Stringifier::ESCAPE_SLASHES ); std::ostream& o = session.sendRequest(req); std::cout << ss8.str() << std::endl;
代码说明
Poco::JSON::Stringifier::OPTIONS_DEFAULT包含了库默认的所有序列化规则,其中就包含ESCAPE_SLASHES(转义正斜杠)这个选项。- 通过
& ~Poco::JSON::Stringifier::ESCAPE_SLASHES的位运算,我们从默认选项中移除了转义斜杠的规则,这样序列化后的JSON就会保留原始的/,而不会转义成\/。
如果你的场景中接收方严格要求不转义的斜杠,这个修改就能解决你的问题。
内容的提问来源于stack exchange,提问作者Preben Enhed
相关产品推荐
相关产品推荐

