Найти тему
10 подписчиков

Недавно узнал про интересную проблему. Кажется очевидным, но нельзя так просто взять и... взять хеш от JSON. Его сначала нужно нормализовать, разэкранировав строки в нём. Плюс отсортировать ключи во всех объектах, т.е. в любом случае придётся парсить.


Эти JSON'ы равны:

{"value": "X "}

{"value": "X\t"}

{"valu\u0065": "X\u0009"}

{"value": "\u0058 "}

{"va\u006cue": "\u0058\t"}

{"value": "\u0058\u0009"}

(не приводил все варианты, их 96, если не ошибся в расчётах)

Для реальных JSON'ов количество эквивалентных вариантов стремится в какие-то сверхастрономические числа, т.к. любой символ можно проэкранировать в любых их комбинациях.

И разные реализации сериализаторов конечно будут экранировать то, что им лично не нравится. Одним норм emoji оставить как есть, другие проэкранируют. Видел как и все русские символы экранировались, будто бы этот JSON в ASCII будет передаваться, а не UTF-8.
Около минуты