Niedawno zacząłem kopać w JSON, a obecnie próbuję użyć liczby jako „identyfikatora”, co nie działa zbyt dobrze. foo:"bar"
działa dobrze, a 0:"bar"
nie.
var Game = {
status: [
{
0:"val",
1:"val",
2:"val"
},
{
0:"val",
1:"val",
2:"val"
}
]
}
alert(Game.status[0].0);
Czy można to zrobić w następujący sposób? Coś takiego, Game.status[0].0
co ułatwiłoby mi życie. Oczywiście można to obejść na inne sposoby, ale ten sposób jest preferowany.
Game.status[0]
jest tablicą? Wtedy twoja składnia byłabyGame.status[0][0]
.Odpowiedzi:
JSON zezwala tylko na to, aby nazwy kluczy były ciągami. Te ciągi mogą składać się z wartości liczbowych.
Nie używasz jednak formatu JSON. Masz literał obiektu JavaScript. Państwo może używać identyfikatorów na klucze, ale identyfikator nie może zaczynać się od cyfry. Jednak nadal możesz używać ciągów.
var Game={ "status": [ { "0": "val", "1": "val", "2": "val" }, { "0": "val", "1": "val", "2": "val" } ] }
Jeśli uzyskujesz dostęp do właściwości za pomocą notacji z kropką, musisz użyć identyfikatorów. Zamiast tego użyj notacji w nawiasach kwadratowych:
Game.status[0][0]
.Ale biorąc pod uwagę te dane, tablica wydaje się mieć więcej sensu.
var Game={ "status": [ [ "val", "val", "val" ], [ "val", "val", "val" ] ] }
źródło
Game.status[0].0
Game.status[0][0]
.You aren't using JSON though. You have a JavaScript object literal.
czy jedyną różnicą jest,var =
czy jest więcej różnic między JSON a literałem obiektu JS? Czy obiekt JS to po prostu JSON przechowywany w zmiennej?Po pierwsze, to nie jest JSON: JSON nakazuje, aby wszystkie klucze były ciągami.
Po drugie, zwykłe tablice robią, co chcesz:
var Game = { status: [ [ "val", "val", "val" ], [ "val", "val", "val" ] }
zadziała, jeśli użyjesz
Game.status[0][0]
. Nie możesz używać liczb z notacją kropkową (.0
).Alternatywnie możesz zacytować liczby (tj.
{ "0": "val" }...
); będziesz mieć zwykłe obiekty zamiast tablic, ale ta sama składnia będzie działać.źródło
Prawdopodobnie potrzebujesz tablicy?
var Game = { status: [ ["val", "val","val"], ["val", "val", "val"] ] } alert(Game.status[0][0]);
źródło
Gdy nazwa właściwości obiektu JavaScript nie zaczyna się od podkreślenia ani litery, nie można używać notacji z kropką (np.
Game.status[0].0
) I należy użyć notacji alternatywnej, czyliGame.status[0][0]
.Jeszcze jedna uwaga, czy naprawdę potrzebujesz, aby był to obiekt wewnątrz tablicy statusu? Jeśli używasz obiektu jako tablicy, dlaczego nie użyć zamiast niej prawdziwej tablicy?
źródło
JSON reguluje typ klucza jako ciąg. Celem jest wsparcie notacji kropkowej w celu uzyskania dostępu do elementów składowych obiektu.
Na przykład osoba = {"wzrost": 170, "waga": 60, "wiek": 32}. Możesz uzyskać dostęp do członków według person.height, person.weight itp. Jeśli JSON obsługuje klucze wartości, wyglądałoby to następująco: person.0, person.1, person.2.
źródło
JSON to „JavaScript Object Notation”. JavaScript określa, że jego klucze muszą być łańcuchami lub symbolami.
Poniższy cytat z MDN Docs używa terminów „klucz / właściwość” w odniesieniu do tego, co częściej słyszę jako „klucz / wartość”.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects
źródło
Co powiesz na
Game.status[0][0] or Game.status[0]["0"] ?
Czy któryś z nich działa?
PS: To, co masz w swoim pytaniu, to obiekt JavaScript, a nie JSON. JSON to „ciągowa” wersja obiektu Javascript.
źródło