我不希望JSON在C ++中转义撇号。如何解决这个问题?

时间:2011-02-18 23:44:16

标签: c++ json escaping

我遇到了一些JSON(libjson 6)的问题。在我正在制作的聊天信使中,服务器(由其他人制作)与桌面客户端之间存在冲突。我的客户端的JSON字符串总是有撇号转义,即使我总是使用引号来分隔字符串。另一方面,服务器不期望撇号被转义,这导致我的客户端发送\'的情况,这显然会给服务器的解析器带来问题。

我解决这个问题的唯一方法是让我的程序停止在JSON消息中转义撇号。但是,在Google和文档中搜索后,我还没有找到任何内容。有人能告诉我怎么做吗?

1 个答案:

答案 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, '\'');
    }
  }
}

否则,你将不得不解析字符串转义的一个子集,这更复杂,但不是很难。