在转义双引号加载javascripts JSON.parse()时由pythons json.dumps()生成的字符串错误

时间:2017-12-03 14:51:57

标签: javascript python json

我有以下字符串,带有两个转义的双引号:

var morgen = '{"a": [{"title": "Fotoausstellung \"Berlin, Berlin\""]}';

据我所知,这是有效的JSON。仍然,执行JSON.parse(morgen)失败并带有

SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 36 of the JSON data

该字符串由pythons json.dumps()方法生成。

2 个答案:

答案 0 :(得分:1)

你必须加倍反斜杠字符:

var morgen = '{"a": [{"title": "Fotoausstellung \\"Berlin, Berlin\\""]}';

这是必要的,因为JavaScript在解析整个字符串常量时会删除单个反斜杠。 (字符串常量中的\"对被解释为表示单个"字符。)

如果您想要的只是将该结构作为JavaScript对象,那么您只需这样做:

var morgen = {"a": [{"title": "Fotoausstellung \"Berlin, Berlin\""]};

答案 1 :(得分:1)

正如Pointy所提到的,你应该能够将JSON作为JavaScript源代码中的对象嵌入,而不是作为必须解析的字符串。

但是,要打印带有适合用作JavaScript字符串的转义码的JSON,您可以告诉Python使用' unicode-literal'来编码它。编解码器。但是,这将生成bytes对象,因此您需要对其进行解码以生成文本字符串。您可以使用' ASCII'编解码器。例如,

import json

# The problem JSON using Python's raw string syntax
s = r'{"a": [{"title": "Fotoausstellung \"Berlin, Berlin\""}]}'

# Convert the JSON string to a Python object
d = json.loads(s)
print(d)

# Convert back to JSON, with escape codes.
json_bytes = json.dumps(d).encode('unicode-escape')
print(json_bytes)

# Convert the bytes to text
print(json_bytes.decode('ascii'))    

<强>输出

{'a': [{'title': 'Fotoausstellung "Berlin, Berlin"'}]}
b'{"a": [{"title": "Fotoausstellung \\\\"Berlin, Berlin\\\\""}]}'
{"a": [{"title": "Fotoausstellung \\"Berlin, Berlin\\""}]}