web-dev-qa-db-ja.com

JSONキーは一意である必要がありますか?

次の質問は、以前に尋ねた質問に関連しています: 単純なJSONの解析を支援します(Java MEにJSONを使用)

JSONキーは一意である必要がありますか?たとえば、次のXML(JSON MEを使用)の解析で問題が発生していました。

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

そして、どうやら、それはキーが一意でなければならないからです。それがすべての場合に当てはまるのかどうか疑問に思っています。たとえば、JSON ME以外のものを使用している場合、これらの名前をすべて解析できますか?

ありがとう。

30
littleK

同じ名前の複数のキーを使用しても「エラー」はありませんが、JSONでは、同じ名前の最後のキーが使用されます。

あなたの場合、キー「名前」は、多くのキー「名前」を持つのではなく、値として配列を含む方が良いでしょう。同じオブジェクトまたは「もの」が2つの名前、または競合する2つの同じプロパティを持つことはあまり意味がありません。

例えば。:

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

RFC 4627 から:

オブジェクト構造は、0個以上の名前/値のペア(またはメンバー)を囲む中括弧のペアとして表されます。名前は文字列です。各名前の後に単一のコロンが続き、名前と値を区切ります。単一のコンマは、値を次の名前から分離します。 オブジェクト内の名前は一意である必要があります

24
jhanschoo

ここに配列を使用した可能な解決策があります。配列インデックスを使用するだけです

the_json_array.getJSONObject(0);


{"nameList":
[{"name" : "JACK"},
{"name" : "JILL"},
{"name" : "JOHN"},
{"name" : "JENNY"},
{"name" : "JAMES"},
{"name" : "JIM"}]}
3
jeet.chanchawat

jQueryはそれを解析できます。ただし、アクセスしようとすると、最後の値が返されます。

チェックアウト http://jsfiddle.net/MQmM4/2/

したがって、構文解析可能ですが、同じキーを使用すると値がオーバーライドされます。

3
Bala R

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オブジェクトは基本的に、キーと値のペアを含むハッシュマップです。

これが、毎回上書きされる理由です。これを避けるために

  1. 一意のキー値が必要です
  2. または、キーと値のペアを個々のオブジェクトとして配列にラップする必要があります

JSONについて詳しく知るには、これをご覧ください JSON Object Java implementation .

1
rm -rf star