2011-02-18 152 views
1

我遇到了一些JSON(libjson 6)的問題。在我製作的聊天信使中,服務器(由其他人制作)與桌面客戶端之間存在衝突。我的客戶的JSON字符串總是有撇號,即使我總是使用引號來分隔字符串。另一方面,服務器不希望省略撇號,這會導致我的客戶端發送\'這種情況,這顯然會給服務器的解析器帶來問題。我不想讓JSON在C++中轉義撇號。如何解決這個問題?

我解決這個問題的唯一方法是讓程序停止在JSON消息中轉義撇號。但是,在Google和文檔中搜索後,我還沒有發現任何東西。有人可以告訴我該怎麼做?

+2

根據[json.org語法](http://json.org/),不允許使用轉義的撇號。你有沒有向libjson報告這個bug? – 2011-02-18 23:55:14

回答

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

否則,你將不得不解析字符串轉義的一個子集,它是更多地參與,但不硬。

+0

謝謝,這個作品完美。 – Neko 2011-02-20 13:21:23