【发布时间】:2016-09-01 20:52:34
【问题描述】:
有没有办法在 JavaScript 中做到这一点:
$ cat test.json
{"body":"\u0000"}
$ python3 -c 'import json; print(json.load(open("test.json", "r")))'
{'body': '\x00'}
注意,上面的数据只有一个\(不需要转义)。所以你在 JavaScript 中有如下情况:
JSON.parse('{"body":"\\u0000"}') // works
JSON.parse('{"body":"\u0000"}') // does not work
对于可能来自二进制源 (websocket) 的任何 UTF-8 数据,是否可以像上面第一个 python 示例中那样直接处理这些数据?
【问题讨论】:
-
在 Javascript 中,就像在 Python 中一样,
\在定义字符串时具有特殊含义。您必须将其加倍为\\才能删除比特殊含义。 产生的字符串值实际上只有一个反斜杠,后跟字符u,等等。 -
在
test.json文件中,您没有定义 Python 或 Javascript 字符串文字,所以不,那里没有双反斜杠。 -
在 ECMAscript 6 中,有一个
String.rawsyntax 可以满足您的需求:JSON.parse(String.raw`{"body":"\u0000"}`) -
最后但同样重要的是,来自 websocket 的数据是数据而不是字符串文字,因此不会转义反斜杠。
标签: javascript python json