Maison >développement back-end >Golang >analyse json irrégulière golang

analyse json irrégulière golang

(*-*)浩
(*-*)浩original
2019-12-17 13:26:053041parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn