2009-02-19 3 views
3

На JSON.org основные структуры данных, которые JSON представляет приведены в качествеПовторное значение ключевого слова в JSON

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

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

Это указано где угодно?

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

EDIT: Я ищу, чтобы определить правильное поведение для моего анализатора.

ответ

3

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

Чтобы это продемонстрировать, я установил example here. Код отображается на странице, и, как видно, в нем есть имя «Barney».

код здесь -

$(function() { 

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

    { 

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

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

    alert(Person.firstName); 

    }); 

}); 

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

+0

Я согласен не использовать eval(). Я фактически использую JSON в Java и, следовательно, исключительно как инкапсуляцию данных, не включая код. –

+0

BTW, спасибо за отличный ответ; Я чувствую себя виноватым за то, что не думал просто проверить это в JS самостоятельно ... проблема с программированием почти исключительно на Java, я думаю. –

+0

Нет проблем. Я настоятельно рекомендую http://jsbin.com/ для тестирования фрагментов HTML, CSS и JavaScript.Он позволяет легко включать общие библиотеки JS и сохранять ваш код в общедоступный URL-адрес. В сочетании с firefox, это абсолютная жемчужина для тестирования идей с –

-1

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

1

Их фамилия, найденная парсером, заменяется новой. Он не бросает искушение.

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

var json = {}; 

// lets augment the object 
json.one = 1; 
json.one = 2; // it gets replaced 
+0

Что не вызывает исключения? OP не указывает инструмент. Вы имеете в виду, что Javascript не генерирует исключение? –

0

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

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

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

+0

Да, я закончил тем, что мой парсер выбрал исключение как поведение по умолчанию, но я добавил параметр синтаксического анализа, который обрабатывает повторяющиеся ключевые слова как массив; я рассматриваю альтернативный вариант для того, чтобы вместо этого заменить поведение замены. –

Смежные вопросы