Всегда ли JSON нужны фигурные скобки на верхнем уровне?

В последнее время я немного узнал о JSON и пытался понять, всегда ли ему нужны фигурные скобки на верхнем уровне или он также может быть массивом? Или массив должен быть заключен в фигурные скобки с именем ключа, а затем массив в качестве значения?

Например, должно ли быть так:

{"title":"title 1"}

а может быть и это:

[1,2,3]

Я спрашиваю в контексте того, что позволяет спецификация и что могут ожидать потребители файла json, как обычно из примеров, которые я видел, это всегда фигурные скобки с парами ключ-значение внутри

json.org/json-en.html
PM 77-1 24.12.2020 15:35

Вы спрашиваете о стандарте или о том, что вам практически может сойти с рук?

PM 77-1 24.12.2020 15:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
1 237
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это может быть массив, не обязательно в фигурных скобках

console.info(JSON.stringify([1,2,3]));

Вот ещё

это может быть следующее:

  1. нулевой
  2. логический
  3. число
  4. множество
  5. объект
  6. Строка: только если она заключена в кавычки

Примеры:

JSON.parse('{}');              // {}
JSON.parse('true');            // true
JSON.parse('"foo"');           // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null');            // null
Ответ принят как подходящий

В оригинальной спецификации говорилось:

Текст JSON — это сериализованный объект или массив.

… это означает, что верхний уровень должен быть либо {}, либо [].

Многие реализации игнорировали это ограничение и позволяли использовать любой тип данных JSON (объект, массив, число, строка, логическое значение, нуль) на верхнем уровне.

обновленная спецификация гласит:

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

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

Implementations that generate only objects or arrays where a JSON text is called for will be interoperable in the sense that all implementations will accept these as conforming JSON texts Что это значит?
j obe 24.12.2020 19:24

Также мое продолжение @Quentin заключается в том, как будут использоваться файлы json других типов, есть ли примеры этого или это просто случай, когда это разрешено, но никто никогда этого не делает. Например, если бы JSON мог содержать только одну строку или набор строк, разделенных запятыми, было бы это вообще практично? Поскольку я когда-либо видел, что он используется только с {}

j obe 24.12.2020 19:26

@jobe — это означает, что старый сериализатор, который может генерировать только JSON на основе {} или [], будет генерировать JSON, который может быть проанализирован синтаксическим анализатором, поддерживающим новый стандарт.

Quentin 24.12.2020 19:33

«Например, если бы JSON мог содержать только одну строку» — тогда синтаксический анализатор вывел бы строку

Quentin 24.12.2020 19:33

«или набор строк, разделенных запятыми» — тогда синтаксический анализатор выдаст исключение. Это будет недопустимый JSON.

Quentin 24.12.2020 19:33

«А будет ли это вообще практично?» - Вероятно. Где-то. Я не сразу думаю о каких-либо вариантах использования.

Quentin 24.12.2020 19:35

Спасибо, это помогает объяснить несколько вещей, в которых я не был уверен, поскольку обычно, изучая API, я видел только фигурную объектную форму JSON.

j obe 24.12.2020 21:21

Другие вопросы по теме