Heim > Backend-Entwicklung > Golang > Wie kann man mit Go eingebettete anonyme Strukturen in JSON reduzieren?

Wie kann man mit Go eingebettete anonyme Strukturen in JSON reduzieren?

Linda Hamilton
Freigeben: 2024-10-31 01:00:29
Original
1056 Leute haben es durchsucht

How to Flatten Embedded Anonymous Structs in JSON with Go?

Eingebettete anonyme Strukturen in JSON mit Go reduzieren

Im bereitgestellten Code versucht die MarshalHateoas-Funktion, die JSON-Darstellung einer Struktur zu reduzieren Einbetten einer anonymen Struktur als Mitglied der Hateoas-Struktur. Allerdings werden die Felder des anonymen Mitglieds als separate benannte Felder behandelt, was zu einer unerwünschten JSON-Ausgabe führt.

Um dieses Problem zu beheben, kann das Reflect-Paket genutzt werden, um eine Schleife über die Felder der eingebetteten Struktur zu erstellen und sie manuell zuzuordnen zu einer abgeflachten Darstellung. Hier ist eine modifizierte Version von MarshalHateoas:

<code class="go">import (
    "encoding/json"
    "fmt"
    "reflect"
)

// ...

func MarshalHateoas(subject interface{}) ([]byte, error) {
    links := make(map[string]string)

    // Retrieve the unexported fields of the subject struct
    subjectValue := reflect.Indirect(reflect.ValueOf(subject))
    subjectType := subjectValue.Type()

    // Iterate over the fields of the embedded anonymous struct
    for i := 0; i < subjectType.NumField(); i++ {
        field := subjectType.Field(i)
        name := subjectType.Field(i).Name
        jsonFieldName := field.Tag.Get("json")

        // Exclude fields with "-" JSON tag
        if jsonFieldName == "-" {
            continue
        }

        // Add field values to the flattened map
        links[jsonFieldName] = subjectValue.FieldByName(name).Interface().(string)
    }

    // Return the JSON-encoded map
    return json.MarshalIndent(links, "", "    ")
}</code>
Nach dem Login kopieren

Durch Ersetzen des anonymen Mitglieds durch eine dynamisch erstellte Karte flacht die MarshalHateoas-Funktion die JSON-Ausgabe jetzt korrekt ab:

<code class="json">{
    "id": 123,
    "name": "James Dean",
    "_links": {
        "self": "http://user/123"
    }
}</code>
Nach dem Login kopieren

Diese Lösung ermöglicht die Erstellung abgeflachter JSON-Darstellungen aus Strukturen mit eingebetteten anonymen Mitgliedern, ohne neue Felder einzuführen oder sich auf plattformspezifische oder bibliotheksabhängige Tricks zu verlassen.

Das obige ist der detaillierte Inhalt vonWie kann man mit Go eingebettete anonyme Strukturen in JSON reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage