Подтвердить что ты не робот

Должны ли ключи JSON быть уникальными?

Следующий вопрос связан с вопросом, который я задал ранее: Помогите разобрать простой JSON (используя JSON для JAVA ME)

Должны ли ключи JSON быть уникальными? Например, у меня возникла проблема с анализом следующего XML (с JSON ME):

{"name" : "JACK","name" : "JILL","name" : "JOHN","name" : "JENNY","name" : "JAMES","name" : "JIM"}

И, по-видимому, это потому, что ключи должны быть уникальными. Мне просто интересно, правда ли это во всех случаях или нет. Например, если бы я использовал нечто, отличное от JSON ME, я мог бы разобрать все эти имена?

Спасибо.

4b9b3361

Ответ 1

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

В вашем случае ключевое "имя" было бы лучше содержать массив как его значение, вместо того, чтобы иметь несколько ключей "имя". Это не имеет большого смысла тот же объект или "вещь", чтобы иметь два имени или два из тех же свойств, которые находятся в конфликте.

например:.

{
  "name" : [ "JOHN", "JACK", "...", ... ]
}

Ответ 2

Из RFC 4627:

Структура объекта представлена ​​в виде пары фигурных скобок   окружающие ноль или несколько пар имен/значений (или членов). Имя - это   строка. Каждое двоеточие появляется после каждого имени, отделяя имя   от значения. Одна запятая отделяет значение от следующего   имя. Имена внутри объекта ДОЛЖНЫ быть уникальными.

Ответ 3

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

Отъезд http://jsfiddle.net/MQmM4/2/

Итак, это похоже на синтаксический анализ, но значение переопределяется, если вы используете тот же ключ.

Ответ 4

здесь возможно решение с использованием массива. просто используйте индекс массива

the_json_array.getJSONObject(0);


{"nameList":
[{"name" : "JACK"},
{"name" : "JILL"},
{"name" : "JOHN"},
{"name" : "JENNY"},
{"name" : "JAMES"},
{"name" : "JIM"}]}

Ответ 5

Объект JSON выглядит следующим образом

public JSONObject(Map<?, ?> map) {
    this.map = new HashMap<String, Object>();
    if (map != null) {
        for (final Entry<?, ?> e : map.entrySet()) {
            final Object value = e.getValue();
            if (value != null) {
                this.map.put(String.valueOf(e.getKey()), wrap(value));
            }
        }
    }
}

Объект JSON в основном представляет собой хэш-карту, содержащую пару значений ключа.

Вот почему вы каждый раз переписываетесь. Чтобы избежать этого

  • Либо вы должны иметь уникальные значения ключей
  • Или вы должны обернуть пару значений ключа как отдельные объекты в массив

Посмотрите на JSON Object java implementation, чтобы глубже узнать о JSON.