为什么JSON.parse会阻塞nodejs中的编码字符?

我试图在Google的词典semi-api中查找“flower”这个词。 资源:

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

长话短说,我用一个callback参数调用JSONP,然后把它重新排列。

但它遇到了这个障碍:

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不能处理它们? 什么是我看出这是很好的作品:

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

我不明白为什么我的叮当声会崩溃

编辑这些都是很好的信息反馈,但没有一个帮助我摆脱堆栈跟踪。

\xHH不是JSON的一部分,但是是JavaScript的一部分。 这相当于\u00HH 。 由于内置的JSON似乎不支持它,我怀疑你想要经历修改非内置的JSON实现的麻烦,你可能只是想在沙箱中运行代码并收集产生的对象。

DelvarWorld编辑:

丁丁丁! 这是我更新的例子,如果JSON.parse失败我试图返回一个new Function()正文:

https://gist.github.com/DelvarWorld/256a46a0c3c5b1b196d1

根据http://json.org ,string的JSON表示中的string字符可能是:

  • 任何-Unicode-character-除了 – “或 – 或 – 控制字符
  • \”
  • \
  • \ /
  • \ b
  • \F
  • \ n
  • \ r
  • \ t
  • \四hex数字

所以根据这个清单,你所得到的“json”在\ x3格式不正确

其原因是因为这两者是相同的。

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

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

你的string被传递给JSON.parse已经解码,因为它的文字\x3cem其实是<em

现在,\ x xx在JavaScript中是有效的,但在JSON中是不合法的,根据http://json.org/&#xFF0C;\“bfnrtu ”后面的字符是"\/bfnrtu

答案是正确的,但需要进行一些修改。 你可能想试试这个: https : //gist.github.com/Selmanh/6973863