2012-02-16 12 views
7

Dlaczego JSON zezwala tylko na to, że string jest kluczem pary? Czemu nie inne typy, takie jak: null, ,,63 Biorąc pod uwagę, że JSON jest ściśle powiązany z JavaScriptem, czy mogę podać przyczynę ze specyfikacji JavaScript (ECMA-262)? Jestem całkowicie początkującym w JavaScript, czy możesz mi pomóc to wskazać.Dlaczego JSON dopuszcza, aby tylko łańcuch był kluczem?

+2

Nie powiedziałbym, że JSON jest częścią JavaScript. Jego struktury danych oparte są na notacji obiektowej i tablicowej, którą można znaleźć w JavaScript, ale jej istnienie jest niezależne od ECMA-262. –

Odpowiedz

1

Ponieważ tak zapisano specyfikację.

+2

To dlaczego tak jest napisane. Wszystko pochodzi z jakiegoś powodu. –

+1

@paladin_t - Niekoniecznie. Czasami jest to po prostu preferencja pisarza. –

+0

@Hot Licks, to rozsądne. –

6

Format JSON jest celowo oparty na podzbiorze składni literalnej języka JavaScript i literalnej składni, a obiekty JavaScript mogą mieć tylko łańcuchy jako klucze - w związku z tym klucze JSON również są ciągami. (OK, możesz sortować liczby jako klucze obiektów JavaScript, ale naprawdę są one konwertowane na ciągi znaków.)

Należy zauważyć, że celem JSON jest to, że jest to ciąg danych reprezentujący dane, aby umożliwić łatwą wymianę między programami napisanymi w języku różne języki uruchomione na różnych maszynach w różnych środowiskach. Jeśli chciałbyś użyć obiektu jako klucza, to ten obiekt z kolei musiałby być w jakiś sposób przedstawiony jako ciąg do transmisji, ale wtedy język odbiorczy musiałby mieć możliwość używania obiektów jako kluczy, co oznaczałoby, że potrzebujesz ograniczony podzbiór JSON dla tych języków, które byłyby po prostu bałaganem.

"Biorąc pod uwagę JSON jest częścią języka JavaScript"

Nie, tak nie jest. Nowsze przeglądarki udostępniają metody tworzenia i analizowania JSON, ale nie są częścią samego języka, z wyjątkiem tego, że JSON jest formatem łańcuchowym, a JavaScript może wykonywać łańcuchy. JSON to zawsze reprezentacja łańcuchowa - należy ją przeanalizować w celu utworzenia obiektu do użycia w JavaScript (lub innych językach) i gdy to nastąpi JavaScript (lub inne języki) traktują wynikowy obiekt tak samo jak każdy inny obiekt.

(Zauważ też, że dany kawałek JSON niekoniecznie mają żadnych kluczy w ogóle. To może być tylko tablicą, jak '["one","two","three"]')

+0

String jest prawie bezpośrednio obsługiwany w różnych językach, ale obiekt musi być spersonalizowany. Musimy zrobić coś, aby poradzić sobie z obiektem od wartości, który może być taki sam dla klucza. Jeśli zrobiliśmy ograniczony klucz może być tylko ciągiem, ponieważ przechodzimy przez język wymieniający łatwość, to znaczy, że wartość też była ograniczona. Wolałbym rozważyć to wice w JavaScript. –

+1

JSON jest przeznaczony do wymiany _data_. Jeśli dane twojej aplikacji są tak skomplikowane, że nie możesz znaleźć sposobu na jej reprezentację używając tylko nazw kluczy opartych na łańcuchach, sugerowałbym, że robisz rzeczy zbyt trudne dla siebie. Jeśli uważasz, że musisz mieć obiekty jako klucze, możesz to zrobić w JSON, włączając w to (zagnieżdżony) obiekt 'keys', który odwzorowuje nazwy właściwości oparte na łańcuchach na obiekty, aby te obiekty stały się jakby" kluczami wirtualnymi ". Odpowiedź na twoje pierwotne pytanie: "Dlaczego tylko smyczki?" ponieważ jest to wszystko, co jest potrzebne do celu JSON-a i na tym właśnie polegał oryginalny projektant. – nnnnnn

1

Głównym powodem według odkrywcy JSON reprezentacji jest „podczas parsowania json danych, istnieje szansa/możliwość, że key używasz aby skierować value może być reserved word w języku analizowania”

przekazać ten talk Douglas Crockforda, który jest odkrywcą JSON r epresentation.

Przykład: { id: 1234, name: "foo", do: "somthing" }

Od JSON jest krzyż kompatybilność język możemy wykorzystać ten zestaw danych w wielu języku. Ale słowo do jest słowem kluczowym w Javascript. Podczas analizowania skończy się błędem składni.

+0

, chociaż większość języków programowania nie używa liczb jako kluczy, ale liczby też nie są dozwolone. –