JSON и двоичные числа

1

Теперь, когда новый javascript принимает двоичные числа (т.е. 0b1111), также не должен JSON? Или это два отдельных объекта?

console.log(Number.isNaN(0b1111); // = 'false' meaning it is a number

но

JSON.parse('{"a":0b1111}');

Не работает.

  • 5
    JSON является подмножеством синтаксиса Javascript. Не все, что позволяет JS, находится в JSON.
Теги:
binary-data

3 ответа

2
Лучший ответ

JSON намеренно предназначен для ограниченного подмножества синтаксиса Javascript. Это позволяет использовать его для представления общих массивов и форматов объектов, одновременно минимизируя сложность парсеров. Таким образом, в то время как буквенный синтаксис Javascript допускает множество альтернативных способов представления одного и того же, JSON обычно допускает только одно.

Например, в Javascript вы можете использовать одиночные или двойные кавычки вокруг строк, но JSON допускает только двойные кавычки. И цитаты вокруг объектов ключей являются необязательными в Javascript (если ключ является допустимым идентификатором), но они требуются в JSON.

Изменение JSON для обеспечения большего количества форматов будет проблематичным, поскольку это вызовет проблемы совместимости с более старыми анализаторами. Поэтому дизайнеры JSON вряд ли расширят его для чего-то, что действительно не нужно. Единственное изменение, которое, как мне кажется, было сделано недавно, - официально разрешить значения верхнего уровня, которые не являются объектами или массивами; большинство парсеров уже приняли это уже. Поэтому, если авторы всех популярных библиотек не добавят двоичные целые числа, они вряд ли будут благословлять это как часть спецификации JSON.

  • 0
    Благодарю. Даже на странице json.org говорится: «JSON - это текстовый формат, полностью независимый от языка». Еще раз, плохое наименование (нотация объекта «Javascript»).
  • 0
    @kevdev Несмотря на то, что он зависит от языка, он был явно разработан, начиная с буквального синтаксиса Javascript и сокращая его. Мне не стыдно использовать echo json_encode() в сценарии PHP для вывода литералов, которые будут подставлены непосредственно в исходный код Javascript.
1

Из MDN:

Двоичные числа

Синтаксис двоичного числа использует начальный нуль, за которым следует строчная или прописная латинская буква "B" (0b или 0B).

То, что у вас есть, является числовым литералом двоичного типа. Назначенное значение - это число. Это число позже используется как десятичный тип (стандартный) в объекте.

var object = { v: 0b1111 };

console.log(JSON.stringify(object));
1

JSON не Javascript :)

Посмотрите на выпуск грамматики для номера на https://json.org/ (правый столбец), и вы увидите, что в JSON нет бинарных литералов.

  • 0
    Я в порядке с отрицательными голосами, но я был бы признателен также за отзыв :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню