Sie haben eine verschachtelte JSON-Antwort und möchten diese auf eine einzige Ebene reduzieren, um den verschachtelten Facebook-Typ zu eliminieren . Um dies zu erreichen, können Sie eine benutzerdefinierte UnmarshalJSON-Funktion verwenden. Eine einfachere und flexiblere Lösung ist jedoch die Verwendung einer Abflachungsfunktion.
<code class="go">// Flatten takes a map and returns a new one where nested maps are replaced // by dot-delimited keys. func Flatten(m map[string]interface{}) map[string]interface{} { o := make(map[string]interface{}) for k, v := range m { switch child := v.(type) { case map[string]interface{}: nm := Flatten(child) for nk, nv := range nm { o[k+"."+nk] = nv } default: o[k] = v } } return o }</code>
In Ihrem Go-Code:
<code class="go">var jsonBlob = []byte(`[ {"StumbleUpon":0,"Reddit":0,"Facebook":{"commentsbox_count":4691,"click_count":0,"total_count":298686,"comment_count":38955,"like_count":82902,"share_count":176829},"Delicious":0,"GooglePlusOne":275234,"Buzz":0,"Twitter":7346788,"Diggs":0,"Pinterest":40982,"LinkedIn":0} ]`) var social []Social err := json.Unmarshal(jsonBlob, &social) if err != nil { fmt.Println("error:", err) } for _, s := range social { socialMap := Flatten(s) fmt.Printf("%+v\n", socialMap) }</code>
Mit der abgeflachten Social-Map erhalten Sie:
map[StumbleUpon:0 Reddit:0 Facebook.commentsbox_count:4691 Facebook.click_count:0 Facebook.total_count:298686 Delicious:0 GooglePlusOne:275234 Buzz:0 LinkedIn:0 Facebook.comment_count:38955 Facebook.like_count:82902 Facebook.share_count:176829 Twitter:7346788 Diggs:0 Pinterest:40982]
Diese Ausgabe zeigt die abgeflachte Social-Map mit allen Facebook-Feldern, die als „Facebook...“ zugänglich sind.
Dieser Ansatz bietet eine generische Möglichkeit, JSON-Antworten abzuflachen. Dadurch entfällt die Notwendigkeit verschachtelter Typen.
Das obige ist der detaillierte Inhalt vonWie kann man verschachteltes JSON in Go reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!