Re[4]: Самый удобный человеко-читаемый язык данных
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 28.12.24 08:56
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Это не имеет значения. Во-первых JSON это подмножество YAML, т.е. любой JSON документ автоматически является YAML-документом.


Да.

vsb> Во-вторых любой YAML-документ однозначно преобразуется в JSON-документ.


Нет, это прямая неправда. Настолько прямая и тупая, что непонятно, зачем вы это рассказываете — проверить можно в пять минут.

В стандарте (смотрю по последнему, 1.2.2 — это важно) есть:

1. Теги. Теги — это то, что интерпретируется парсером по своему вкусу (обычно, вызывая соответствующий конструктор типа), кроме стандартных. В JSON нет тегов.

2. Двоичные данные, тегом !!binary. В JSON аналога нет. Вложить в него можно только если ввести какое-то дополнительное условие, как именно двоичные данные будут представлены — как правило, строка в base64 или в hex, однозначности тут нет.

3. Ordered mapping, тегом !!omap. Аналога в JSON нет. Даже если основные реализации в основных языках (JS, Python) автоматически используют именно ordered mapping (LinkedHashSet), реального такого требования нет.

Во-вторых: об однозначности преобразования можно говорить только после того, как показана однозначность парсинга, а тут уже наблюдаются несовместимые различия между версиями стандарта YAML.

Вот например смотрим сюда и видим

As it turns out, numbers from 0 to 59 separated by colons are sexagesimal (base 60) number literals. This arcane feature was present in yaml 1.1, but silently removed from yaml 1.2, so the list element will parse as 1342 or "22:22" depending on which version your parser uses. Although yaml 1.2 is more than 10 years old by now, you would be mistaken to think that it is widely supported: the latest version libyaml at the time of writing (which is used among others by PyYAML) implements yaml 1.1 and parses 22:22 as 1342.


Только не надо рассказывать про то, что все обязаны были сразу перейти на последнюю версию — это так не работает. Там же дальше:

The change from yaml 1.2.1 to 1.2.2 on the other hand, was a multi-year effort by a team of experts


И это, да, прямое следствие "слишком большой" спецификации, когда люди не в состоянии оценить все последствия того, что они туда напихали. Стандарты YAML чудовищно переусложнены непонятно зачем и это даёт реальные проблемы.

Вероятно, вы используете одну версию парсера и совместимый с ней генератор, или же намеренно ограничиваете возможности только человекобезопасными синтаксисами. Тогда вы могли проскочить и не заметить ни одной из этих проблем. Но не надо рассказывать, что их нет.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.