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

json.Unmarshal ne fonctionne pas même avec les champs exportés

PHPz
Libérer: 2024-02-14 08:12:07
avant
786 Les gens l'ont consulté

即使有导出字段,json.Unmarshal 也不起作用

L'éditeur PHP Zimo vous rappelle que même lors de la désérialisation de JSON, la fonction json.Unmarshal ne fonctionnera pas correctement s'il y a des champs exportés. En effet, l'analyseur JSON ne peut analyser que les champs exportés et ne peut pas reconnaître les champs non exportés. Par conséquent, lorsque vous utilisez la fonction json.Unmarshal pour la désérialisation, vous devez vous assurer que les champs requis sont des champs exportés, sinon les données JSON ne seront pas analysées correctement. Il s'agit d'un problème important auquel il faut prêter attention lors de l'utilisation de la sérialisation et de la désérialisation JSON. J'espère que cela vous sera utile.

Contenu de la question

fichier json :

{
  "student_class": [
    {
      "student_id": 1,
      "class_id": 2
    },
    {
      "student_id": 1,
      "class_id": 1
    },
Copier après la connexion

Structure :

package studentclass

type studentclasses struct {
    studentclasses []studentclass
}

type studentclass struct {
    studentid int `json:"student_id"`
    classid   int `json:"class_id"`
}
Copier après la connexion

Mes fonctions :

func Read() {
    var studentClasses studentClass.StudentClasses
    jsonFile, err := os.Open("db/student_class.json")
    if err != nil {
        fmt.Println(err)
    }
    defer jsonFile.Close()

    byteValue, _ := io.ReadAll(jsonFile)
    json.Unmarshal(byteValue, &studentClasses)

    for i := 0; i < len(studentClasses.StudentClasses); i++ {
        fmt.Println(studentClasses.StudentClasses[i])
    }

}
Copier après la connexion

Rien retourné

Quand je le suis json.unmarshall... 之后添加 fmt.println(studentclasses) 时,它返回 {[]} erreur json.unmarshal zéro

J'ai fait des recherches sur ce problème, mais des personnes qui ont le même problème que moi disent que les champs de la structure ne sont pas exportés. Exemple : go json.unmarshal ne fonctionne pas Je ne sais pas où est l'erreur et ce que j'ai fait de mal S'il vous plaît, aidez-moi à résoudre ce problème. Merci à tous!

Solution

Vous n'avez pas précisé le nom json des classes d'étudiants.

type studentclasses struct {
    studentclasses []studentclass `json:"student_class"`
}
Copier après la connexion

Exemple :

package main

import (
    "encoding/json"
    "fmt"
)

type StudentClasses struct {
    StudentClasses []StudentClass `json:"student_class,omitempty"`
}

type StudentClass struct {
    StudentId int `json:"student_id"`
    ClassId   int `json:"class_id"`
}

func main() {
    _json := `{
  "student_class": [
    {
      "student_id": 1,
      "class_id": 2
    },
    {
      "student_id": 1,
      "class_id": 1
    }
  ]
}`
    var studentClasses StudentClasses
    json.Unmarshal([]byte(_json), &studentClasses)

    fmt.Printf("%+v", studentClasses)
}
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!

source:stackoverflow.com
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