Sie könnten eine rekursive Funktion mit einem Switch-Typ Behauptung bauen, um die JSON-Array in eine mehrdimensionale Karte Typ behaupten oder eine abgeflachte Karte. Leider wird Ihre multidimensionale Karte sehr schnell kompliziert.
Was ich meine ist, Sie müssen oft mindestens ein paar Dimensionen zuordnen (zum Beispiel: map [string] map [string] map [string] string), wenn Sie ein verschachteltes JSON-Array haben wie " Menschen "oben.
Wenn Sie versucht haben, ein verschachteltes JSON-Array zu glätten, würden sich Ihre Schlüssel überlappen (d. H. Sie können den "name" -Schlüssel nur einmal verwenden). Sie könnten die Schlüssel markieren - so etwas wie "name_1": "Nick", aber diese Lösung funktioniert möglicherweise nicht für Ihren Anwendungsfall.
Wenn Sie die mehrdimensionale Weg gehen wollen, kann dieses Paket auch für Ihre Bedürfnisse arbeiten: http://github.com/Jeffail/gabs
Ich gebe Ihnen ein maßgeschneidertes Beispiel, und dann zwei Beispiele aus dem Link zu gabs der Github Seite :
package main
import (
"fmt"
"github.com/Jeffail/gabs"
)
func main() {
jsonS := `{
"people": [
{
"diffs": [
77
],
"original": {
"name": "Nick",
"active": "Active",
"email": "[email protected]"
},
"id": "21"
}
]
}`
gabsCon, err := gabs.ParseJSON([]byte(jsonS))
if err != nil {
fmt.Println("gabs ParseJSON failed")
}
n1, ok := gabsCon.Path("people.original.name").Data().(string)
if !ok {
fmt.Println("gabs path failed")
}
fmt.Println(n1)
}
Hier ist ein nicht-zugeschnittene Beispiel, das gedruckt werden soll - erste, dritte, zweite):
jsonParsed, _ := gabs.ParseJSON([]byte(`{"array":[ "first", "second", "third" ]}`))
// S is shorthand for Search
children, _ := jsonParsed.S("array").Children()
for _, child := range children {
fmt.Println(child.Data().(string))
}
Und ein anderes Beispiel, das drucken würde - 1, 2, 3:
jsonParsed, _ := gabs.ParseJSON([]byte(`{"array":[ {"value":1}, {"value":2}, {"value":3} ]}`))
fmt.Println(jsonParsed.Path("array.value").String())
Willkommen zu einer statisch typisierten Sprache. Mit dem 'json'-Paket können Sie immer Unmarshal in ein' map [string] Interface {} 'umwandeln, aber das ist normalerweise nicht das, was Sie wirklich wollen. – RayfenWindspear