Maison  >  Article  >  développement back-end  >  Golang ne peut pas analyser JSON

Golang ne peut pas analyser JSON

WBOY
WBOYoriginal
2023-05-15 11:22:072166parcourir

Golang est un langage de programmation très pratique. Son principal objectif de conception est d'améliorer la lisibilité, la maintenabilité et la fiabilité du programme. Lors de l'écriture de programmes Golang, nous devons souvent utiliser JSON comme format standard pour la sérialisation et la communication des données. Cependant, lorsque vous utilisez Golang pour analyser JSON, vous rencontrez parfois des problèmes, comme l'impossibilité d'analyser JSON. Cet article présentera quelques erreurs courantes d’analyse JSON et proposera des solutions.

  1. Impossible d'analyser un objet JSON vide

Dans Golang, nous pouvons utiliser la fonction json.Unmarsha1l pour analyser les données JSON dans une structure ou une tranche dans le langage Go. Cependant, si nous essayons d'analyser un objet JSON vide, le langage Go signalera une erreur :

json: cannot unmarshal object into Go struct field .Field of type string

En effet, l'objet JSON vide n'a pas de paires clé-valeur, l'analyseur ne peut donc pas l'analyser dans une structure Go. La solution peut consister à utiliser des pointeurs pour marquer les champs de structure comme facultatifs, afin que les objets JSON vides puissent être pris en charge. Par exemple :

type MyStruct struct {
    Field *string
}

data := []byte(`{}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field) // output: <nil>
  1. Impossible d'analyser la valeur nulle en JSON

En JSON, null représente une valeur vide et le type correspondant en Golang est nul. Si nous essayons d'analyser la valeur nulle en JSON, le langage Go signalera une erreur :

json: cannot unmarshal null into Go struct field .Field of type string

En effet, la valeur nulle en JSON ne peut pas être convertie en un type non-pointeur dans le langage Go. La solution est d'utiliser des types pointeurs pour déclarer les champs de structure :

type MyStruct struct {
    Field *string
}

data := []byte(`{"Field": null}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field) // output: <nil>
  1. Impossible d'analyser les tableaux vides en JSON

En JSON, un tableau vide représente un tableau sans éléments, et le type correspondant en Golang est []. Si nous essayons d'analyser un tableau vide en JSON, le langage Go signalera une erreur :

json: cannot unmarshal array into Go struct field .Field of type []string

C'est parce qu'un tableau vide ne peut pas être converti en une tranche de type non-pointeur. La solution est d'utiliser des types pointeurs pour déclarer des tranches :

type MyStruct struct {
    Field *[]string
}

data := []byte(`{"Field": []}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field) // output: &[]
  1. Impossible d'analyser les objets imbriqués en JSON

En JSON, nous pouvons imbriquer plusieurs objets. Cependant, lors de l'analyse des objets imbriqués, Golang signalera une erreur :

json: cannot unmarshal object into Go struct field .Field of type string

Cela est dû au fait que Golang ne peut pas convertir les objets imbriqués en champs de types non structurés. La solution consiste à utiliser des types struct pour analyser les objets imbriqués :

type Field struct {
    Name string
}
type MyStruct struct {
    Field Field
}

data := []byte(`{"Field": {"Name": "value"}}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field.Name) // output: "value"
  1. Impossible d'analyser les caractères non-ASCII en JSON

En JSON, nous pouvons utiliser le jeu de caractères UTF-8 pour encoder n'importe quel caractère, y compris les caractères ASCII et non-ASCII. . Cependant, lors de l'analyse des caractères non-ASCII dans JSON, Golang signalera une erreur :

json: invalid character 'ò' looking for beginning of value

Cela est dû au fait que le langage Go utilise le codage UTF-8 par défaut et que les caractères des données JSON peuvent ne pas être codés en UTF-8. La solution est d'utiliser d'autres formats d'encodage pour l'analyse, comme l'encodage binaire brut de JSON :

data := []byte{0x22, 0xC3, 0xB2, 0x22}
var s string
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s) // output: "ò"

Lors de l'écriture de programmes Golang, nous avons souvent besoin d'utiliser le format de données JSON, mais parfois nous rencontrons des problèmes lors de l'analyse de JSON. Cet article explique certaines erreurs courantes d'analyse JSON et propose des solutions de contournement. Espérons que ces conseils vous aideront à éviter certaines erreurs courantes lors de l’écriture de programmes Golang.

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