Recentemente comecei a me aprofundar em JSON e atualmente estou tentando usar um número como "identificador", o que não funciona muito bem. foo:"bar"
funciona bem, enquanto 0:"bar"
não.
var Game = {
status: [
{
0:"val",
1:"val",
2:"val"
},
{
0:"val",
1:"val",
2:"val"
}
]
}
alert(Game.status[0].0);
Existe alguma maneira de fazer isso da seguinte maneira? Algo como Game.status[0].0
Tornaria minha vida mais fácil. Claro que há outras maneiras de contornar isso, mas essa é a preferida.
Game.status[0]
um array? Então sua sintaxe seriaGame.status[0][0]
.Respostas:
JSON permite apenas que nomes de chave sejam strings. Essas strings podem consistir em valores numéricos.
No entanto, você não está usando JSON. Você tem um literal de objeto JavaScript. Você pode usar identificadores para chaves, mas um identificador não pode começar com um número. Você ainda pode usar strings.
var Game={ "status": [ { "0": "val", "1": "val", "2": "val" }, { "0": "val", "1": "val", "2": "val" } ] }
Se você acessar as propriedades com notação de ponto, terá que usar identificadores. Use a notação colchete em vez disso:
Game.status[0][0]
.Mas, dados esses dados, um array parece fazer mais sentido.
var Game={ "status": [ [ "val", "val", "val" ], [ "val", "val", "val" ] ] }
fonte
Game.status[0].0
Game.status[0][0]
.You aren't using JSON though. You have a JavaScript object literal.
é a única diferençavar =
ou existem mais diferenças entre JSON e um literal de objeto JS? Um objeto JS é basicamente JSON armazenado em uma variável?Em primeiro lugar, não é JSON: o JSON exige que todas as chaves sejam strings.
Em segundo lugar, os arrays regulares fazem o que você quer:
var Game = { status: [ [ "val", "val", "val" ], [ "val", "val", "val" ] }
vai funcionar, se você usar
Game.status[0][0]
. Você não pode usar números com a notação de ponto (.0
).Como alternativa, você pode citar os números (ou seja
{ "0": "val" }...
); você terá objetos simples em vez de Arrays, mas a mesma sintaxe funcionará.fonte
Provavelmente você precisa de um array?
var Game = { status: [ ["val", "val","val"], ["val", "val", "val"] ] } alert(Game.status[0][0]);
fonte
Quando o nome de uma propriedade de objeto Javascript não começa com um sublinhado ou uma letra, você não pode usar a notação de ponto (como
Game.status[0].0
) e deve usar a notação alternativa, que éGame.status[0][0]
.Uma observação diferente, você realmente precisa que ele seja um objeto dentro da matriz de status? Se você estiver usando o objeto como um array, por que não usar um array real?
fonte
JSON regula o tipo de chave para ser string. O objetivo é oferecer suporte à notação de ponto para acessar os membros do objeto.
Por exemplo, pessoa = {"altura": 170, "peso": 60, "idade": 32}. Você pode acessar os membros por pessoa.altura, pessoa.peso, etc. Se o JSON oferecer suporte a chaves de valor, será semelhante a pessoa.0, pessoa.1, pessoa.2.
fonte
A respeito
Game.status[0][0] or Game.status[0]["0"] ?
Um desses funciona?
PS: O que você tem em sua pergunta é um objeto Javascript, não JSON. JSON é a versão 'string' de um objeto Javascript.
fonte
JSON é "JavaScript Object Notation". JavaScript especifica que suas chaves devem ser strings ou símbolos.
A seguinte citação do MDN Docs usa os termos "chave / propriedade" para se referir ao que eu ouço mais frequentemente denominado como "chave / valor".
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects
fonte