2013-07-31 76 views
2

我正在試圖在Google's dictionary semi-api中查找單詞「flower」。來源:爲什麼JSON.parse會阻塞nodejs中的編碼字符?

https://gist.github.com/DelvarWorld/0a83a42abbc1297a6687

長話短說,我打電話與JSONP回調paramater然後regexing出來。

但它擊中這個障礙:

undefined:1 
ple","terms":[{"type":"text","text":"I stopped to buy Bridget some \x3cem\x3ef 
                    ^
SyntaxError: Unexpected token x 
    at Object.parse (native) 

谷歌的服務我逃出來的HTML字符,這是很好的,但JSON.parse無法處理他們?什麼是weirding我出來就是這個工作得很好:

$ node 

> JSON.parse('{"a":"\x3cem"}') 
    { a: '<em' } 

我不知道爲什麼我的thingle崩潰

編輯這些都是很好的信息repsonses,但沒有人幫我擺脫堆棧跟蹤。

+0

看看http://json.org/ – Paul

回答

1

\xHH不是JSON的一部分,但它是JavaScript的一部分。它相當於\u00HH。由於內置JSON似乎不支持它,我懷疑你想要經歷修改非內置JSON實現的麻煩,你可能只想在沙箱中運行代碼並收集產生的對象。

+0

中的字符串如果你需要解析一個「接近JSON」的結構,另一個缺點是用'\ x'替換'\ x' u00'解析之前。這稍微安全一些,因爲它避免了評估。 – bobince

+0

@bobince:對;這就是爲什麼我包含「'\xHH'≡'\ u00HH'」位。問題在於你必須小心其他的轉義,例如,不要把'\\ xHH'(這是文字'\ xHH')改成'\\ u00HH'(文字文字'\ u00HH ')。我也認同'eval'ing通常是不理想的,但是如果你在一個沙盒裏做了幾乎任何事情,而且超時,它應該是安全的。 – icktoofay

0

根據http://json.org,在串的JSON表示的字符串的字符可以是:

  • 任何-Unicode的character-除了 - 「 - 或 - 或 - 控制字符
  • \ 「
  • \
  • \/
  • \ b
  • \˚F
  • \ n
  • \ r
  • \ t
  • 帶有\ U四十六進制數字

所以根據這份清單, 「JSON」 你得到的\ X3是畸形

0

它工作的原因是因爲這兩者是等價的。

JSON.parse('{"a":"\x3cem"}') 

JSON.parse('{"a":"<em"}') 
你字符串傳遞給 JSON.parse以來已解碼

其字面\x3cem實際上是<em

現在,\ X XX是有效的JavaScript,但不是在JSON ,根據http://json.org/,你可以在\之後唯一的字符是"\/bfnrtu

相關問題