Повторное значение ключевого слова в JSON - PullRequest
3 голосов
/ 20 февраля 2009

On JSON.org основные структуры данных, которые представляет JSON, представлены как

  1. Коллекция пар имя / значение и
  2. Упорядоченный список значений.

Я нигде не смог найти, должен ли второй член с таким же именем, как у уже проанализированного в текущем объекте, (a) вызвать исключение или (b) заменить существующий элемент.

Это указано где-нибудь?

Что делают существующие парсеры с повторяющимися именами?

РЕДАКТИРОВАТЬ: Я пытаюсь определить правильное поведение для моего анализатора.

Ответы [ 4 ]

3 голосов
/ 20 февраля 2009

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

Чтобы продемонстрировать это, я настроил пример здесь . Код отображается на странице, и, как видно, в окне сообщения есть имя «Барни».

Код здесь -

$(function() {

    $('#myButton').click(function(e) 

    {

    var myJsonString =  "Person = {'firstName':'Fred','lastName':'Flintstone','firstName':'Barney'}";

    eval("(" + myJsonString + ")");

    alert(Person.firstName);

    });

});

Кстати, я использовал здесь eval () для простоты использования. Я бы порекомендовал использовать парсер JSON вместо eval () из-за проблем с безопасностью.

1 голос
/ 20 февраля 2009

Фамилия, найденная парсером, заменяется новой. Это не бросает ожидание.

Это просто синтаксис Javascript.

var json = {};

// lets augment the object
json.one = 1;
json.one = 2; // it gets replaced
0 голосов
/ 24 февраля 2009

Я почти уверен, что оба указанных вами поведения будут приняты вместе с другими (используйте первое, используйте любое из них). :-) То есть такое поведение не определено в спецификации JSON POV.

С практической точки зрения используемые мной реализации делают либо одно из упомянутых вами предложений, либо «используйте первое».

Так что нет, я бы не рассчитывал на конкретное поведение, учитывая, что инструменты могут выбирать, что делать.

0 голосов
/ 20 февраля 2009

Поскольку JSON является просто подмножеством Javascript, он в значительной степени зависит от спецификации Javascript. Я не знаю лично, каков ответ, но я бы настоятельно рекомендовал не полагаться на поведение, если это вообще возможно.

...