Sie müssen eine Karte verwenden (vom Typ map[string]interface{}
) mit dynamischer JSON zu arbeiten. Hier ist ein Beispiel eine neue Karte erstellen:
// Initial declaration
m := map[string]interface{}{
"key": "value",
}
// Dynamically add a sub-map
m["sub"] = map[string]interface{}{
"deepKey": "deepValue",
}
Unmarshalling JSON in eine Karte wie folgt aussieht:
var f interface{}
err := json.Unmarshal(b, &f)
Der obige Code Sie mit einer Karte verlassen würde in f
, mit einer Struktur ähnelt:
f = map[string]interface{}{
"Name": "Wednesday",
"Age": 6,
"Parents": []interface{}{
"Gomez",
"Morticia",
},
}
Sie müssen eine Art Behauptung verwenden, darauf zuzugreifen, andernfalls gehen nicht wissen, dass es eine Karte ist:
m := f.(map[string]interface{})
Sie müssen für jedes Element, das Sie aus der Karte ziehen, auch Assertionen oder Typenschalter verwenden. Der Umgang mit unstrukturiertem JSON ist mühsam.
Weitere Informationen:
Vielleicht muss ich meine Frage an-Satz wieder. Nehmen wir an, ich möchte einen JSON-Körper konstruieren. Ich weiß nicht, was die interne Struktur des JSON ist. Wie kann ich eine Karte so erstellen? –
Gehen Sie durch https://tour.golang.org, wo Sie Karten und viele andere Dinge finden, die Sie benötigen. Dann, wie andere sagen, ist 'map [string] interface {}' der Typ für ein JSON-Objekt mit unbekannten Schlüsseln und Werttypen (und '[] interface {}' ist ein JSON-Array mit unbekannten Elementtypen). – twotwotwo