Здравствуйте, vsb, Вы писали:
Pzz>>Не понимаю. В XML можно изобразить массив, просто повторяя элемент (с одинаковым именем) несколько раз. Некоторые протоколы так и делают.
vsb>Без дополнительной информации вроде XML Schema — нельзя. Т.к. нельзя отличить null от массива нулевой длины и нельзя отличить массив единичной длины от объекта.
<Array name="foo">
<ArrayElement>0</ArrayElement>
<ArrayElement>1</ArrayElement>
<ArrayElement>2</ArrayElement>
</Array>
Null — отсутствие массива.
В JSON-е, кстати, тоже, null можно передать только или отсутствием, ну или впихнуть туда null, но мне кажется как-то скользко, что у некоторого элемента значением может быть или null, или нормальные данные.
Pzz>>Сам спросил, сам ответил. 2^52 же. Числа в JSON — это 64-битный float в формате IEEE 754, и это от JS так пошло.
vsb>Нет, числа в JSON вообще никак не специфицированы. В каждой реализации они по-своему работают. В Java без проблем я могу сделать 54-битное число в JSON, сформировать и прочитать. И это число в JS будет читаться неправильно.
RFC 8259, раздел 7 (
https://datatracker.ietf.org/doc/html/rfc8259#page-7) прямо об этом и пишет, что числа, вообще-то, имеются ввиду IEEE 754 binary64, и что, хотя некоторые реализации делают не так, лучше бы всё же иметь это ввиду.
Pzz>>UTF-8 же.
vsb>Нет, не специфицировано, ну или я не видел.
RFC 8259, секция 8.1. (
https://datatracker.ietf.org/doc/html/rfc8259#section-8.1)
Раньше "подразумевалось", но для мира RFC это нормально. Есть "священное писание" — сами RFC, а есть "священное предание" — то, что все, кому надо, знают, но оно нигде не написано.
Например, то, как в TCP передаётся urgent pointer, в RFC 793 было написано неправильно, а в ядре BSD UNIX — правильно, и все это знали (кроме Microsoft, они сделали, как в RFC, хе-хе).
Pzz>>Раздражает, что нет синтаксиса для передачи бинарных данных (массива байт).
vsb>Обычно в base64 передают.
Непонятно, получив такое, это надо буквально применять или из base64 сначала декодировать. Схемы/метаданных-то нету...