Некорректный парсинг экранированного обратного слеша в JSON

Почему не работает парсинг 4n + 2 обратных слешей? Иначе говоря, как экранировать нечётное количество слешей?

// JavaScript

JSON.parse('{"content": "\\"}')
# Python 3

import json
print(json.loads('{"content": "\\"}'))

Онлайн-парсеры обрабатывают нормально (правда, некоторые обрабатывают не совсем так, как ожидается, выводя в результат удвоенное количество слешей).


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

Вообще-то JS тоже говорит SyntaxError: Unexpected end of JSON input

введите сюда описание изображения

Потому что \ экранирует второй \ и в функцию попадает строка '{"content": "\"}', где оно воспринимается как попытка экранировать кавычку.

Используйте 4 слеша, или 'row string'

import json

obj = json.loads('{"content": "\\\\"}')

print( obj ) # {'content': '\\'}
print( len( obj['content'] ) ) # 1 (это один экранированный слэш, а не два символа)

print( json.loads(r'{"content": "\\"}') )
→ Ссылка