Maison > développement back-end > Golang > le corps du texte

analyse json irrégulière golang

(*-*)浩
Libérer: 2019-12-17 13:26:05
original
3016 Les gens l'ont consulté

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}`
Copier après la connexion

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)
}
Copier après la connexion

Résultat

aaa
22222
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal