Разрешены ли двойные определения в JSON, и если да, то как их следует интерпретировать? - PullRequest
2 голосов
/ 26 августа 2011

Это действительный JSON?

{
  "name": "foo",
  "name": "bar"
}

Если да, то как это следует интерпретировать?

Ответы [ 5 ]

7 голосов
/ 26 августа 2011

Это технически законно, но категорически не рекомендуется, согласно RFC :

Имена внутри объекта ДОЛЖНЫ быть уникальными.

Вы можете пойти одним из двух маршрутов:

  • Маршрут JavaScript: в JavaScript это запрещено. Поскольку предполагается, что JSON является подмножеством, отклоните ввод как недействительный.
  • Маршрут Postel / Python: перезаписать запись "var" последним значением.
2 голосов
/ 26 августа 2011

Согласно RFC 4627 , дублирующиеся имена не приветствуются.Смотрите раздел 2.2.Объекты :

Имена внутри объекта ДОЛЖНЫ быть уникальными.

Приведенный выше URL-адрес также ссылается на RFC 2119 , в котором указываетсякак слово СЛЕДУЕТ интерпретировать:

СЛЕДУЕТ

Это слово или прилагательное "РЕКОМЕНДУЕТСЯ" означают, что
могут существовать веские причины в определенных обстоятельствах игнорировать
конкретный предмет, но все последствия должны быть поняты и
тщательно взвешены перед выбором другого курса.

Однако , многие синтаксические анализаторы и API-интерфейсы JSON реализуют это как ВСЕГДА ДОЛЖНО и выдают ошибку или игнорируют несколько значений при обнаружении повторяющихся свойств. включает jQuery.parseJSON () , а также сериализацию .NET JSON .

0 голосов
/ 26 августа 2011

Нет, нет.У вас есть два атрибута с одинаковой меткой / именем / названием.Вот очень простое и краткое объяснение JSON

0 голосов
/ 26 августа 2011

Объект JSon, как и любой другой объект, не может иметь двух атрибутов с одинаковыми именами. Это недопустимо так же, как дважды иметь на карте один и тот же ключ.

JSONObject выдает исключение, если у вас есть два ключа с одинаковым именем в одном объекте. Вы можете изменить свой объект, чтобы ключи не повторялись под одним и тем же объектом.

В этом случае изменение будет означать, что имя вашего ключа json будет иметь значение в виде массива

0 голосов
/ 26 августа 2011

Это не допустимый JSON, поскольку есть две переменные имени.Прочитайте этого , чтобы помочь вам лучше понять JSON.

...