最近、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
私の人生をずっと楽にしてくれるでしょう。もちろん、他の方法もありますが、この方法が推奨されます。
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"
]
]
}
まず、JSONではありません。JSONでは、すべてのキーを文字列にする必要があります。
第二に、通常の配列はあなたが望むことをします:
var Game = {
status: [
[
"val",
"val",
"val"
],
[
"val",
"val",
"val"
]
}
}
Game.status[0][0]
を使用すると動作します。ドット表記(.0
)で数字を使用することはできません。
または、数字を引用することもできます(つまり、{ "0": "val" }...
);配列の代わりにプレーンオブジェクトがありますが、同じ構文が機能します。
おそらく配列が必要ですか?
var Game = {
status: [
["val", "val","val"],
["val", "val", "val"]
]
}
alert(Game.status[0][0]);
Javascriptオブジェクトプロパティの名前がアンダースコアまたは文字で始まっていない場合は、ドット表記を使用できません(Game.status[0].0
)、そしてmust代替表記法、Game.status[0][0]
。
別の注意点として、ステータス配列内のオブジェクトであることが本当に必要ですか?配列のようなオブジェクトを使用している場合、代わりに実際の配列を使用してみませんか?
JSONは、キータイプを文字列に規制します。目的は、ドット表記をサポートしてオブジェクトのメンバーにアクセスすることです。
たとえば、person = {"height":170、 "weight":60、 "age":32}です。メンバーには、person.height、person.weightなどでアクセスできます。JSONが値キーをサポートしている場合、person.0、person.1、person.2のようになります。
どう?
Game.status[0][0] or Game.status[0]["0"] ?
これらのいずれかが機能しますか?
PS:質問にあるのは、JSONではなくJavascriptオブジェクトです。 JSONは、Javascriptオブジェクトの「文字列」バージョンです。