Heim >Backend-Entwicklung >Golang >Wie kann ich JSON-Schlüssel beim Codieren von JSON in Go sortieren?

Wie kann ich JSON-Schlüssel beim Codieren von JSON in Go sortieren?

DDD
DDDOriginal
2024-12-21 08:21:10136Durchsuche

How Can I Sort JSON Keys When Encoding JSON in Go?

Sortieren von JSON-Schlüsseln in Go

Das Python-JSON-Paket bietet eine sort_keys-Option, um JSON mit Schlüsseln in einer sortierten Reihenfolge zu erstellen. In diesem Artikel wird untersucht, wie eine ähnliche Funktionalität im Codierungs-/JSON-Paket von Go erreicht werden kann.

Lösung

In Go sortiert das JSON-Paket automatisch die Schlüssel von:

  • Maps: Schlüssel werden lexikografisch sortiert
  • Strukturen: Schlüssel werden geordnet in der in der Struktur definierten Reihenfolge

Implementierungsdetails

Die Implementierung der Schlüsselsortierung finden Sie in der Datei encode.go im Paket „encoding/json“. :

func (enc *encodeState) encodeMap(v reflect.Value) {
    m := v.Interface().(map[string]interface{})
    if enc.indent {
        enc.write(`{` + enc.indentPrefix)
    } else {
        enc.write(`{`)
    }
    enc.mapStarted = true
    keys := make([]string, 0, len(m))
    for k := range m {
        keys = append(keys, k)
    }
    sort.Strings(keys)
    for i, k := range keys {
        enc.encodeValue(reflect.ValueOf(k))
        enc.write(`:`)
        enc.encodeValue(reflect.ValueOf(m[k]))
        if i < len(m)-1 {
            enc.write(`,`)
        }
    }
    enc.write(`}`)
    enc.mapStarted = false
}

Diese Implementierung stellt sicher, dass Kartenschlüssel lexikografisch sortiert werden und Strukturschlüssel basierend auf ihrer Reihenfolge darin sortiert werden die Strukturdefinition.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Schlüssel beim Codieren von JSON in Go sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn