在 JavaScript 和 Python 2.7 中的 JSON 字符串中转义反斜杠

Escape backslash in JSON String in JavaScript and Python 2.7

本文关键字:字符串 转义 JSON 中的 JavaScript Python      更新时间:2023-09-26

这是我要加载或解析的 JSON 字符串:

json_str = '[{"executable_path": "C:''GCafeClient''CafeClient.exe", "arguments": "-package 100003"}]'

如果我在 json 格式化程序或这里测试它是有效的(这也是有道理的——我已经转义了反斜杠。

但是当我在 Python 2.7 中json.loads(json_str)或在 Chrome 中的 JavaScript 中JSON.parse(json_str)时。我收到错误:

ValueError: Invalid 'escape: line 1 column 25 (char 24)

Uncaught SyntaxError: Unexpected token G

如果我这样说,那么它对两者都有效:

json_str = '[{"executable_path": "C:''''GCafeClient''''CafeClient.exe", "arguments": "-package 100003"}]'

为什么会这样?

你需要转义两次'''',第一次是 Python/JavaScript 文字,第二次是 JSON。

因此"C:''GCafeClient"将计算为 "C:'GCafeClient" ,这是不可接受的 JSON,因为它包含一个未转义的"''"并会抛出错误。

另一方面,"C:''''GCafeClient"将计算为"C:''GCafeClient"的JSON,因此''''被转义并接受。

我只是在这里发布我对这个问题的理解:

# python
json_str = '[{"executable_path": "C:''''GCafeClient''''CafeClient.exe", "arguments": "-package 100003"}]'
# which is equivalent to
json_str = r'[{"executable_path": "C:''GCafeClient''CafeClient.exe", "arguments": "-package 100003"}]'
# and JSON format requires backslash to be escaped