У меня есть следующая строка с двумя экранированными двойными кавычками:
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
Строка была создана методом json.dumps()
.
Как упоминает Pointy, вы должны просто вставлять этот JSON как объект в свой исходный код JavaScript, а не как строку, которая должна быть проанализирована.
Тем не менее, чтобы напечатать JSON с escape-кодами, подходящими для использования в качестве строки JavaScript, вы можете сказать Python, чтобы закодировать его с кодеком "unicode-literal". Тем не менее, это создаст объект bytes
, поэтому вам нужно его декодировать, чтобы создать текстовую строку. Вы можете использовать кодек ASCII для этого. Например,
import json
# The problem JSON using Python 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\\""}]}
Вам придется удвоить символы обратной косой черты:
var morgen = '{"a": [{"title": "Fotoausstellung \\"Berlin, Berlin\\""]}';
Это необходимо, потому что JavaScript будет удалять одиночные обратные косые черты при анализе общей строковой константы. (\"
Пара" в строковой константе интерпретируется как означающая один "
символ").
Если все, что вам нужно, это структура как объект JavaScript, вы просто выполните следующее:
var morgen = {"a": [{"title": "Fotoausstellung \"Berlin, Berlin\""]};
}
на внутреннем объекте.