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!