我遇到了一些JSON(libjson 6)的问题。在我正在制作的聊天信使中,服务器(由其他人制作)与桌面客户端之间存在冲突。我的客户端的JSON字符串总是有撇号转义,即使我总是使用引号来分隔字符串。另一方面,服务器不期望撇号被转义,这导致我的客户端发送\'
的情况,这显然会给服务器的解析器带来问题。
我解决这个问题的唯一方法是让我的程序停止在JSON消息中转义撇号。但是,在Google和文档中搜索后,我还没有找到任何内容。有人能告诉我怎么做吗?
答案 0 :(得分:2)
您可以在撇号之前删除转义符。
如果您从未在撇号之前转义转义(例如\\'
表示“转义转义和非转义撇号”)或您的图书馆总是逃脱它们,只需将所有\'
替换为'
。有各种字符串替换函数,但这是一个简单的情况:
bool is_broken_escaped_apos(std::string const &data, std::string::size_type n) {
return n + 2 <= data.size()
and data[n] == '\\'
and data[n+1] == '\'';
}
void fix_broken_escaped_apos(std::string &data) {
for (std::string::size_type n = 0; n != data.size(); ++n) {
if (is_broken_escaped_apos(data, n)) {
data.replace(n, 2, 1, '\'');
}
}
}
否则,你将不得不解析字符串转义的一个子集,这更复杂,但不是很难。