簡體   English   中英

為什么在JSON標准的字符串中不允許雙引號和反斜杠?

[英]Why aren't double quotes and backslashes allowed in strings in the JSON standard?

如果我在Chrome或Firebug的JavaScript控制台中運行此程序,則效果很好。

JSON.parse('"\u0027"') // Escaped single-quote

但是,如果我在Javascript控制台中運行這兩行中的任何一行,則會引發錯誤。

JSON.parse('"\u0022"') // Escaped double-quote
JSON.parse('"\u005C"') // Escaped backslash

RFC 4627第2.5節似乎暗示只要正確轉義就允許使用\\"字符。但是,我嘗試過的2種瀏覽器似乎不允許這樣做。但是,我做錯了什么嗎?在這里還是真的不允許它們在字符串中?我也嘗試過分別使用\\"\\\\代替"\\

我覺得我做錯了什么,因為我很難相信JSON不允許在字符串中使用這些字符,特別是因為規范似乎沒有提到我可以發現說不允許使用的任何內容。

您需要引用反斜杠!

我們稱之為玫瑰的

用別的名字聞起來會很甜

無論您如何在字符串常量中表達雙引號,雙引號都是雙引號。 如果在常量中的\\u\u003c/code>表達式前加上反斜杠,則效果就是反斜杠引號的雙引號,實際上就是您所擁有的。

關於您的問題最有趣的事情是,它可以幫助我認識到我編寫的每個JavaScript字符串解析器都是錯誤的。

JavaScript會在到達JSON解析器之前解釋Unicode轉義序列。 這帶來了一個問題:

  • 第一次未用JavaScript引用'"\'"'"'"
    第二次(通過JSON解析器)作為有效JSON表示字符串: '

  • 第一次未用JavaScript '"""'"""
    JSON解析器將此未加引號的版本"""視為無效JSON(不希望最后一個引號)。

  • 第一次未用引號將'"\\"' (通過JavaScript): "\\"
    JSON解析器還將未加引號的版本"\\"視為無效的JSON(第二個引號用反斜杠轉義,因此不會終止字符串)。

解決此問題的方法是轉義轉義序列,如\\\\u....實際上,您可能只是不使用JSON解析器。 在正確的上下文中使用(通過將其包裝在括號中可確保所有JSON是有效的JavaScript。

您沒有在轉義反斜杠和雙引號,因為\\ u00xx被javascript解析器解釋。

JSON.parse('"\\\u0022"')
JSON.parse('"\\\""')

JSON.parse('"\\\u005C"')
JSON.parse('"\\\\"')

按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM