2013-10-27 10 views
20

Ich möchte einen Webservice schreiben, der Listen von JSON-Objekten bedient. Ist es gültig JSON Folgendes zurück:Ist eine Liste/ein Array gültig JSON?

[ 
    {"keyA1":"valA", "keyB1":"valB"} 
,{"keyA2":"valA", "keyB2":"valB"} 
,{"keyA3":"valA", "keyB3":"valB"} 
] 

Oder ist der „richtige“ Weg, es zu tun, es in einem einzelnen Objekt zu setzen zurückzukehren:

{"elements":[ 
    {"keyA1":"valA", "keyB1":"valB"} 
    ,{"keyA2":"valA", "keyB2":"valB"} 
    ,{"keyA3":"valA", "keyB3":"valB"} 
]} 
+2

Beide werden funktionieren. Wenn Sie Zweifel haben, können Sie Ihren JSON unter [jsonlint.org] (http://jsonlint.org/) überprüfen –

+0

http://jsonlint.com/ sagt "gültig json". – meagar

Antwort

30

Beide Formulare sind gültig. Für eine API würde ich jedoch das zweite Formular empfehlen. Der Grund ist, dass es Ihnen einen Pfad für die Erweiterung Ihrer API gibt. Wenn Sie beispielsweise über eine API getUsersInGroup verfügen, die ein Array von Benutzerobjekten zurückgibt, und Sie später entscheiden, dass Sie beispielsweise zusammengefasste Statistiken über die zurückgegebenen Benutzer einfügen möchten, gibt es keine einfache Möglichkeit, dies zu tun, ohne zu brechen vorhandene Clients (oder viele redundante Daten in jedem Benutzerobjekt enthalten). Wenn Sie ein Objekt verwenden, fügen Sie dem Objekt einfach ein weiteres Feld hinzu, das von Clients in einer früheren Version der API ignoriert wird.

Kurz gesagt, versuchen Sie in der API, wo immer möglich, Top-Level-Primitive zu vermeiden, und Sie werden es einfacher finden, in der Zukunft zu erweitern.

3

Sie JSON validieren können mit http://jsonlint.com/

Beide sind gültige JSON-Ergebnisse, aber ich würde die zweite verwenden. Es ist logischer und beschreibender.

3

Beide sind gültige JSON, aber die zweite Möglichkeit ist korrekt; Die Weitergabe von JSON als Array kann zu Sicherheitslücken führen. Informationen dazu finden Sie unter related post zur JSON-Sicherheit. In einigen Frameworks, wie zum Beispiel flask, gibt es sogar Maßnahmen, die verhindern, dass Sie JSON als Array weitergeben.