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
Linda HamiltonOriginal
2024-10-31 01:00:291059Durchsuche

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>

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>

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!

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