2013-03-12 5 views
24

Kann es Zitate um JSON-Nummern geben? In den meisten Suchlinks scheint es, dass Zahlen keine Anführungszeichen erfordern. Aber sollten die Parser sowohl "attr" : 6 als auch "attr" : "6" akzeptieren?Können JSON-Nummern angegeben werden?

Wenn MyParser eine Methode hat getInt eine Nummer bekommen angesichts der Schlüssel, sollte MyParser.getInt("attr") Rückkehr 6 in beiden Fällen oder eine Ausnahme im letzteren Fall werfen?

Antwort

52

In JSON, 6 ist die Nummer sechs. "6" ist ein String, der die Ziffer6 enthält. Also die Antwort auf die Frage "Kann JSON Zahlen zitiert werden?" ist im Grunde "nein", denn wenn Sie sie in Anführungszeichen setzen, sind sie keine Zahlen mehr.

Aber sollten die Parser sowohl "attr": 6 als auch attr: "6" akzeptieren?

Das zweite Beispiel ist ungültig, weil attr in Anführungszeichen gesetzt werden müssen, zB:

{"attr": "6"} 

... gültig ist, und definiert ein Objekt mit einer Eigenschaft namens attr mit dem String Wert "6" , wobei:

{"attr": 6} 

... gültig ist, und definiert ein Objekt mit einer Eigenschaft namens attr mit dem Nummer Wert 6 und schließlich:

{attr: 6} 

... und

{attr: "6"} 

... sind beide ungültig JSON, weil Eigenschaftsnamen in doppelten Anführungszeichen angegeben werden müssen.

Wenn MyParser eine Methode hat getInt eine Nummer zu bekommen die Schlüssel gegeben, sollten die Fälle MyParser.getInt („attr“) return 6 in beide oder eine Ausnahme im letzteren Fall werfen?

Das ist eine Design-Entscheidung für die Person ist den Parser bietet, im Grunde der Wahl zwischen getInt strengen Vorgaben zu machen (wirft eine Ausnahme, wenn Sie es auf "attr": "6" versuchen) oder lose ("6"-6 Nötigung und die Rückkehr, dass). JavaScript ist normalerweise locker, und daher könnte es ein Argument dafür geben, dass man locker ist; umgekehrt verursacht die Tatsache, dass JavaScript locker ist, manchmal Probleme, was ein Argument für Strenge sein könnte.

3

Das hängt von der Sprache ab, die Sie verwenden, um die ganze Zahl zu erhalten, denn wenn die Programmiersprache keine implizite Konvertierung von String zu int bietet, können Sie Probleme haben.

Sie sollten sich nicht zu viele Gedanken machen, da moderne Programmiersprache heutzutage eine Zeichenfolge implizit in eine Zahl ohne zusätzlichen Code konvertieren kann.Etwas, das man in Betracht ziehen sollte, ist bei der Verwendung von Programmiersprachen wie JavaScript, wenn Sie == und === verwenden, wenn die Werte zu vergleichen, nimmt === berücksichtigt den Typ des Wertes, während == nicht, so 6 === "6" wird false zurückkehren, während 6 == "6" wird true zurück.

Beantworten Sie Ihre Frage, es wird keine Ausnahme ausgelöst, wenn Sie eine Programmiersprache verwenden, die implizite Konvertierung von String zu Int bietet.

Verwandte Themen