我遇到了一些JSON(libjson 6)的問題。在我製作的聊天信使中,服務器(由其他人制作)與桌面客戶端之間存在衝突。我的客戶的JSON字符串總是有撇號,即使我總是使用引號來分隔字符串。另一方面,服務器不希望省略撇號,這會導致我的客戶端發送\'
這種情況,這顯然會給服務器的解析器帶來問題。我不想讓JSON在C++中轉義撇號。如何解決這個問題?
我解決這個問題的唯一方法是讓程序停止在JSON消息中轉義撇號。但是,在Google和文檔中搜索後,我還沒有發現任何東西。有人可以告訴我該怎麼做?
我遇到了一些JSON(libjson 6)的問題。在我製作的聊天信使中,服務器(由其他人制作)與桌面客戶端之間存在衝突。我的客戶的JSON字符串總是有撇號,即使我總是使用引號來分隔字符串。另一方面,服務器不希望省略撇號,這會導致我的客戶端發送\'
這種情況,這顯然會給服務器的解析器帶來問題。我不想讓JSON在C++中轉義撇號。如何解決這個問題?
我解決這個問題的唯一方法是讓程序停止在JSON消息中轉義撇號。但是,在Google和文檔中搜索後,我還沒有發現任何東西。有人可以告訴我該怎麼做?
您可以在撇號之前刪除轉義符。
如果你從來沒有逃脫逃脫撇號之前(例如\\'
意爲「逃脫,逃逸和轉義撇號」),或者你的庫總能逃脫他們,只需更換所有\'
與'
。有各種不同的字符串替換功能,但是這是一個簡單的例子:
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, '\'');
}
}
}
否則,你將不得不解析字符串轉義的一個子集,它是更多地參與,但不硬。
謝謝,這個作品完美。 – Neko 2011-02-20 13:21:23
根據[json.org語法](http://json.org/),不允許使用轉義的撇號。你有沒有向libjson報告這個bug? – 2011-02-18 23:55:14