2013-03-12 16 views
24

Czy mogą być cytaty dotyczące numerów JSON? W większości linków do wyszukiwania wydaje się, że liczby nie "wymagają" cytatów. Ale czy parsery akceptują zarówno "attr" : 6, jak i "attr" : "6"?Czy można cytować numery JSON?

Jeśli MyParser ma metodę getInt aby uzyskać numer podany klucz powinien MyParser.getInt("attr") powrotną 6 w obu przypadkach, czy wyjątek w tym ostatnim przypadku?

Odpowiedz

52

W JSON, 6 jest numerem sześć. "6" to ciąg zawierający cyfrę 6. Tak więc odpowiedź na pytanie "Czy można podać liczby jsonów?" jest w zasadzie "nie", ponieważ jeśli umieścisz je w cudzysłowach, nie są już liczbami.

Ale czy parsery powinny przyjmować zarówno "attr": 6 i attr: "6"?

Drugim przykładem jest nieważny, ponieważ attr musi być w cudzysłowie, np:

{"attr": "6"} 

... jest ważny, a definiuje obiekt o właściwość o nazwie attr z strun wartości "6" , ale:

{"attr": 6} 

... jest ważny i definiuje obiekt o właściwości o nazwie attr o wartości liczba6 i wreszcie:

{attr: 6} 

... i

{attr: "6"} 

... są zarówno nieważne JSON ponieważ nazwy właściwości muszą być w cudzysłowach.

Jeśli MyParser ma metodę getInt aby uzyskać numer podany klucz, powinny MyParser.getInt („attr”) return 6 w obu przypadkach, czy wyjątek w tym ostatnim przypadku?

To jest decyzja projektowa dla osoby wnoszącej parser, w zasadzie wybór pomiędzy getInt jest ścisłe (rzuca wyjątek, jeśli spróbujesz go na "attr": "6") lub luzem (zmuszanie "6" do 6 i powrót tego). JavaScript jest zwykle luźny, więc może istnieć argument za byciem luźnym; z drugiej strony fakt, że JavaScript jest luźny, czasami powoduje problemy, co może być argumentem za byciem surowym.

3

To będzie zależało od języka, którego używasz do uzyskania liczby całkowitej, ponieważ jeśli język programowania nie zapewnia niejawnej konwersji z ciągu na int, możesz mieć problemy.

Nie powinieneś się zbytnio przejmować, ponieważ współczesny język programowania może w domyśle przekonwertować ciąg na numer bez dodatkowego kodu.Coś trzeba wziąć pod uwagę to, przy użyciu języków programowania jak JavaScript, gdy używasz == i === przy porównywaniu wartości === uwzględnia rodzaj wartości, podczas gdy == nie, więc 6 === "6" powróci false, natomiast 6 == "6" powróci true.

Udzielając odpowiedzi na pytanie, nie rzuca wyjątku, jeśli używasz języka programowania, który zapewnia niejawną konwersję z ciągu na int.