2016-08-01 8 views
1

Dave Cheney, einer der führenden Fachexperten auf Go, schrieb: "Bei der Initialisierung einer Variablen mit einem zusammengesetzten Literal erfordert Go, dass jede Zeile des zusammengesetzten Literals endet mit einem Komma, sogar die letzte Zeile Ihrer Deklaration. Dies ist das Ergebnis der semicolon rule. "Laufzeitfehler beim Analysieren von JSON-Arrays und Map-Elementen mit abschließenden Kommas

Wenn ich jedoch versuche, diese schöne Regel auf JSON-Text anzuwenden, scheint der Parser dieser Philosophie nicht zu entsprechen. Im folgenden Code funktioniert das Entfernen des Kommas. Gibt es eine Lösung dafür, dass ich nur eine Zeile ändern kann, wenn ich Elemente in meinen Diffs hinzufüge?

Antwort

5

Gibt es nicht. Die JSON specification lässt ein abschließendes Komma nicht zu.

Dies ist keine gültige JSON:

{ "objects": 
    [ 
     {"name": "foo"}, 
]} 

Es ist eine Go-Syntax, die Sie benötigen ein Komma zu verwenden, wenn die Aufzählung auf der Linie nicht geschlossen ist (more on this), zB:

// Slice literal: 
s := []int { 
    1, 
    2, 
} 

// Function call: 
fmt.Println(
    "Slice:", 
    s, 
) 

Selbst wenn Sie einen bestimmten JSON-Parser "überzeugen" könnten, ihn still zu schlucken, würden andere gültige JSON-Parser zu Recht einen Fehler melden. Tu es nicht.