2016-01-04 45 views
2

我有一個沒有轉義字符的json,我的代碼無法解析,因爲沒有轉義字符。我可以通過在雙引號前添加\來使其工作。但是,由於一些限制,我正在尋找解決方法,我想知道 -可以使用轉義字符進行雙引號JSON

a。是否有任何其他方式可以讓此json無轉義字符地工作,並且具有雙引號的內容按原樣顯示在我的應用程序上,或者

b。在所有雙引號之前我是否必須有轉義字符,並且沒有解決方法?

"abc": { 
    "x1": { 
     "text1": "key1", 
     "text2": "Given "Example text" is wrong" 
    } 
} 

謝謝!!

+3

如果您的嵌入式雙引號沒有轉義字符,那麼它就是* not * legal JSON – Alnitak

+0

http://json.org/string.gif您可以在http://json.org/上找到整個規範。 RFC規範語言中的 –

回答

5

你的例子是無效的JSON,但我認爲你知道這一點。 :-)

我一定需要所有的雙引號

是,之前有一個轉義字符有"的唯一途徑內JSON字符串是使用某種類型的逃逸。與JavaScript不同,JSON沒有'限定字符串或反向分隔模板,它們變成字符串(ES2015中的新增內容)。您可以使用幾種不同的轉義序列(例如\"\u0022),但它們仍然是轉義序列。畢竟,"是JSON解析器知道它是如何找到字符串的末尾的。

HTML的特定情況下,如果您將該字符串解釋爲HTML,則還可以使用"(一個命名字符實體)。但是這並沒有改變你需要正確逃避字符串的事實(因爲換行符和其他幾個字符也需要轉義,而不僅僅是")。

我的經驗是生成JSON的最佳方法是在內存中生成一個結構,然後使用環境的工具將該結構轉換爲有效的JSON。在JavaScript中,這是JSON.stringify;在PHP中,它是json_encode;等等。你可以找到的任何語言或環境都有一個JSON庫(內置或不包含)。

1

您應該添加escape char()以獲得有效的JSON。 按照specs,這是在JSON使用的特殊字符的列表:

  • \ b退格(ASCII碼08)
  • \ f換(ASCII碼0C)
  • \ n換行
  • \ r回車
  • \ t製表
  • \」雙引號
  • \反斜槓卡拉科特
+3

轉義是'MUST',而不是'SHOULD'。 – Alnitak

+0

這就是爲什麼它是大寫 –

+4

你錯過了我的觀點 - 逃避報價是絕對的要求,而不是「應該」完成的事情。請參閱RFC 2119。 – Alnitak

相關問題