web-dev-qa-db-ja.com

「インデックス」として数値を使用(JSON)

最近、JSONの調査を開始しました。現在、「識別子」として数値を使用しようとしていますが、うまく機能していません。 foo:"bar"は正常に動作しますが、0:"bar"しません。

var Game = {
    status: [
                {
                    0:"val",
                    1:"val",
                    2:"val"
                },
                {
                    0:"val",
                    1:"val",
                    2:"val"
                }
           ]
}

alert(Game.status[0].0);

次の方法でそれを行う方法はありますか?何かのようなもの Game.status[0].0私の人生をずっと楽にしてくれるでしょう。もちろん、他の方法もありますが、この方法が推奨されます。

67
Zar

JSONでは、キー名のみを文字列にすることができます。これらの文字列は数値で構成できます。

ただし、JSONを使用していません。 JavaScriptオブジェクトリテラルがあります。 canキーに識別子を使用しますが、識別子を数字で始めることはできません。それでも文字列を使用できます。

var Game={
    "status": [
        {
            "0": "val",
            "1": "val",
            "2": "val"
        },
        {
            "0": "val",
            "1": "val",
            "2": "val"
        }
    ]
}

ドット表記でプロパティにアクセスする場合は、識別子を使用する必要があります。代わりに角括弧表記を使用してください:Game[0][0]

しかし、そのデータを考えると、配列はより意味があるように思えます。

var Game={
    "status": [
        [
            "val",
            "val",
            "val"
        ],
        [
            "val",
            "val",
            "val"
        ]
    ]
}
101
Quentin

まず、JSONではありません。JSONでは、すべてのキーを文字列にする必要があります。

第二に、通常の配列はあなたが望むことをします:

var Game = {
  status: [
    [
      "val",
      "val",
      "val"
    ],
    [
      "val",
      "val",
      "val"
    ]
  }
}

Game.status[0][0]を使用すると動作します。ドット表記(.0)で数字を使用することはできません。

または、数字を引用することもできます(つまり、{ "0": "val" }...);配列の代わりにプレーンオブジェクトがありますが、同じ構文が機能します。

5
Amadan

おそらく配列が必要ですか?

var Game = {

    status: [
        ["val", "val","val"],
        ["val", "val", "val"]
    ]
}

alert(Game.status[0][0]);
5
yatskevich

Javascriptオブジェクトプロパティの名前がアンダースコアまたは文字で始まっていない場合は、ドット表記を使用できません(Game.status[0].0)、そしてmust代替表記法、Game.status[0][0]

別の注意点として、ステータス配列内のオブジェクトであることが本当に必要ですか?配列のようなオブジェクトを使用している場合、代わりに実際の配列を使用してみませんか?

3
zatatatata

JSONは、キータイプを文字列に規制します。目的は、ドット表記をサポートしてオブジェクトのメンバーにアクセスすることです。

たとえば、person = {"height":170、 "weight":60、 "age":32}です。メンバーには、person.height、person.weightなどでアクセスできます。JSONが値キーをサポートしている場合、person.0、person.1、person.2のようになります。

1
Huiguorou

どう?

Game.status[0][0] or Game.status[0]["0"] ?

これらのいずれかが機能しますか?

PS:質問にあるのは、JSONではなくJavascriptオブジェクトです。 JSONは、Javascriptオブジェクトの「文字列」バージョンです。

0
Willem Mulder