Heim > Backend-Entwicklung > Golang > Wie kann ich der JSON-Ausgabe für unbekannte Go-Strukturen beliebige Felder hinzufügen?

Wie kann ich der JSON-Ausgabe für unbekannte Go-Strukturen beliebige Felder hinzufügen?

Patricia Arquette
Freigeben: 2024-12-16 06:10:10
Original
700 Leute haben es durchsucht

How Can I Add Arbitrary Fields to JSON Output for Unknown Go Structs?

Erweitern der JSON-Ausgabe für unbekannte Strukturen

Problem:

Beim Umgang mit unbekannten Strukturen oder Schnittstellen das Hinzufügen beliebiger Felder zu Die JSON-Ausgabe kann eine Herausforderung sein. Der vorgeführte Code veranschaulicht dieses Problem. Wie können wir die gewünschte JSON-Ausgabe für unbekannte Strukturen replizieren?

Lösung 1: Dynamische Typgenerierung mithilfe von Reflection

Ein Ansatz besteht darin, mithilfe von Reflection zur Laufzeit einen dynamischen Typ zu generieren . Dieser Typ ist eine Struktur mit einem anonymen Feld des umschlossenen Schnittstellentyps und einem zusätzlichen Feld. Durch die Manipulation dieses dynamischen Typs können wir die gewünschte JSON-Ausgabe erzielen.

func printInterface(val interface{}) {
    t2 := reflect.StructOf([]reflect.StructField{
        {Name: "X", Anonymous: true, Type: reflect.TypeOf(val)},
        {Name: "Extra", Type: reflect.TypeOf("")},
    })

    v2 := reflect.New(t2).Elem()
    v2.Field(0).Set(reflect.ValueOf(val))
    v2.FieldByName("Extra").SetString("text")

    json.NewEncoder(os.Stdout).Encode(v2.Interface())
}
Nach dem Login kopieren

Lösung 2: Marshal-Unmarshal-Marshal

Eine alternative Lösung besteht im Marshalling der Eingabe Wert, Unmarshalling in einer Karte, Hinzufügen des zusätzlichen Felds und Marshalling noch einmal.

func printInterface(val interface{}) error {
    data, err := json.Marshal(val)
    if err != nil { return err }

    v2 := map[string]interface{}{}
    if err := json.Unmarshal(data, &v2); err != nil { return err }

    v2["Extra"] = "text"
    return json.NewEncoder(os.Stdout).Encode(v2)
}
Nach dem Login kopieren

Beide Lösungen ermöglichen es uns, beliebige Felder zur JSON-Ausgabe für unbekannte Strukturen hinzuzufügen. Die erste Lösung ist anspruchsvoller und bietet eine bessere Kontrolle, während die zweite Lösung einfacher, aber aufgrund des Dual-Marshallings weniger leistungsfähig ist. Letztendlich hängt die Wahl der Lösung von den spezifischen Anforderungen und Prioritäten des Anwendungsfalls ab.

Das obige ist der detaillierte Inhalt vonWie kann ich der JSON-Ausgabe für unbekannte Go-Strukturen beliebige Felder hinzufügen?. 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