Maison  >  Article  >  développement back-end  >  json.Unmarshal ne fonctionne pas même avec les champs exportés

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

PHPz
PHPzavant
2024-02-14 08:12:07774parcourir

即使有导出字段,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
    },

Structure :

package studentclass

type studentclasses struct {
    studentclasses []studentclass
}

type studentclass struct {
    studentid int `json:"student_id"`
    classid   int `json:"class_id"`
}

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])
    }

}

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"`
}

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)
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer