2012-04-04 93 views
13

我有一個Sencha Touch應用程序。我有一家商店使用ajax代理和json閱讀器。第二個字符串中 http://www.fileformat.info/info/unicode/char/2028/index.htmJSON響應中的非法字符

雖然它是無形的,性格發生兩次這裏,期間和結束引號之間:一些在JSON從我的末日應用程序返回的字符串會包含這個人物

"description": "Each of the levels requires logic, skill, and brute force to crush the enemy.

" 

嘗試複製並粘貼「每個關卡都需要邏輯,技能和蠻力來壓制敵人」。它不會被解析爲字符串,並且會以SyntaxError: Unexpected token ILLEGAL失敗。

這會導致JSON響應失敗。我一直堅持這個很長一段時間!有什麼建議麼?

+1

爲什麼不直接從輸出JSON字符串刪除服務器端的人品不好? – 2012-04-04 22:50:46

+0

@MaratTanalin我正在調查,但直到最近我沒有訪問服務器。我猜沒有客戶端解決方案? – nnyby 2012-04-04 22:52:13

+3

如果字符串是非法的JavaScript文字(不確定你的情況,但是,例如,JS文字中不允許非轉義的換行符),那麼客戶端解決方案不太可能存在。雖然也許你可以嘗試將JSON Ajax響應作爲_text_而不是JSON,然後將不需要的字符作爲字符串過濾掉,然後將過濾的字符串解析爲JSON字符串。不幸的是,這是一種解決方法。最好是在JSON字符串中找到非法字符的特定性質並解決原因。 – 2012-04-04 23:03:43

回答

5

解決此問題的唯一可靠方法是服務器端。確保你的JSON生成器發出逃脫的字符,例如作爲\u2028

根據我的經驗,最簡單的方法是簡單地將JSON編碼爲純ASCII,這將始終有效。缺點是效率不高,因爲非ASCII字符會佔用更多空間,所以根據這些字符的頻率,您可能不需要這種權衡...

Perl的JSON :: XS文檔有這個問題的一個很好的解釋和如何解決Perl的建議: ​​

+1

鏈接固定。謝謝。 – Lasse 2014-02-24 12:11:21

0

從概念上講,您只能通過適當地轉義從服務器發送有效JavaScript文字的字符串。

如果你要修復需要一個額外的解決方法步驟,客戶端在這個問題上(似乎只在Firefox工作):

var a = escape("Each of the levels requires logic, skill, and brute force to crush the enemy."); 
alert(unescape(a)); 

但討論是過時的,因爲你必須在服務器上逃生。

+3

代碼不會解析,所以你不能_fix_它在客戶端! – 2012-04-16 11:38:57

+0

對我來說,它與螢火蟲ff工作,你甚至嘗試過嗎? – Sam 2012-04-16 18:12:34

+0

我在Chrome中試過。在':'之後複製了OP的代碼部分,並將其粘貼到控制檯中,出現語法錯誤。 – 2012-04-17 05:36:40

-1

,如果你在你使用JQuery應用程序,然後這個人是OK:

var object = $.parseJSON(json_string);