Maison >développement back-end >Golang >analyse json irrégulière golang
json.Unmarshal L'objet d'opération est un []octet, ce qui signifie que tous les JSON traités doivent être chargés en mémoire.
S'il y a un JSON chargé, il sera plus rapide d'utiliser json.Unmarshal. (Il est recommandé d'apprendre : go)
json.Decoder exploite un flux ou d'autres types qui implémentent l'interface io.Reader . Cela signifie qu'il peut être analysé lors de sa réception ou de sa transmission. Il n'est pas nécessaire de recopier l'intégralité du JSON en mémoire lors du traitement d'un ensemble de données plus important.
Le meilleur choix est le suivant :
Si les données proviennent d'un io.Reader ou doivent lire les données d'un flux, choisissez json.Decoder
Si l'intégralité du JSON a été chargé en mémoire, utilisez json.Unmarshal
Analyse de type indéfini
Parfois, lorsque vous rencontrez du JSON avec des champs incertains, vous devez Jugez et analysez en même temps. Par exemple :
t1 := `{"type":"a", id:"aaa"}`t2 := `{"type":"b", id:22222}`
Annuler le marshal vers l'interface{}
Vous pouvez d'abord annuler le marshal vers l'interface{}, puis déterminer les champs clés avant le traitement ultérieur.
type Data struct { Type string `json:"type"` Id interface{} `json:"id"`}func decode(t string) { var x Data err := json.Unmarshal([]byte(t), &x) if err != nil { panic(err) } if x.Type == "a" { fmt.Println(x.Id.(string)) } else { fmt.Println(x.Id.(float64)) //json解析中number默认作为float64解析 } }func main() { t1 := `{"type":"a", "id":"aaa"}` t2 := `{"type":"b", "id":22222}` decode(t1) decode(t2) }
Résultat
aaa 22222
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!