2013-09-07 21 views
9

In Python können Sie JSON mit Schlüssel in sortierter Reihenfolge produzieren, durchWie erstellt man JSON mit sortierten Schlüsseln in Go?

import json 
print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4, separators=(',', ': ')) 

tut Ich habe eine ähnliche Option in Go nicht gefunden. Irgendwelche Ideen, wie ich ähnliches Verhalten in gehen kann?

+0

können Sie die von Ihnen verwendete Lösung posten? Ich habe versucht mit 'NewEncoder (...). Encode (structInstance)' aber die Ausgabe Json Schlüssel sind nicht sortiert. –

Antwort

29

Das json-Paket bestellt immer Schlüssel beim Marshalling. Im Einzelnen:

  • Karten haben ihre Schlüssel lexikografisch

  • sortiert

    Structs Schlüssel vermarshallten werden in der Reihenfolge in der Struktur definiert

Die Umsetzung lebt hier ATM:

+1

Nein. Ich frage mich, warum die Kodierung/JSON-Dokumentation diese entscheidende Eigenschaft nicht erwähnt. –

+0

Nun ist es dokumentiert: https://golang.org/pkg/encoding/json/#Marshal: Map-Werte werden als JSON-Objekte codiert. Der Schlüsseltyp der Zuordnung muss entweder eine Zeichenfolge, ein Integer-Typ oder eine Codierungscodierung sein.TextMarshaler. Die Zuordnungsschlüssel werden sortiert und als JSON-Objektschlüssel verwendet, indem die folgenden Regeln angewendet werden, die der UTF-8-Anforderung unterliegen, die für Zeichenfolgenwerte über – programaths

+2

beschrieben wird. Was ist mit den Strukturschlüsseln? Ist die Bestellung dokumentiert? – updogliu