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.
Около минуты
31 июля 2022