我有以下字符串,带有两个转义的双引号:
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()
方法生成。
答案 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\\""}]}