Heim > Backend-Entwicklung > Golang > json.Unmarshal funktioniert nicht einmal mit exportierten Feldern

json.Unmarshal funktioniert nicht einmal mit exportierten Feldern

PHPz
Freigeben: 2024-02-14 08:12:07
nach vorne
815 Leute haben es durchsucht

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

Der PHP-Editor Zimo erinnert Sie daran, dass die json.Unmarshal-Funktion auch beim Deserialisieren von JSON nicht ordnungsgemäß funktioniert, wenn exportierte Felder vorhanden sind. Dies liegt daran, dass der JSON-Parser nur exportierte Felder analysieren kann und nicht exportierte Felder nicht erkennen kann. Wenn Sie die Funktion json.Unmarshal zur Deserialisierung verwenden, müssen Sie daher sicherstellen, dass es sich bei den erforderlichen Feldern um exportierte Felder handelt, da sonst die JSON-Daten nicht korrekt analysiert werden. Dies ist ein wichtiger Punkt, den Sie bei der Verwendung der JSON-Serialisierung und -Deserialisierung beachten sollten. Ich hoffe, dass es für Sie hilfreich ist.

Frageninhalt

JSON-Datei:

{
  "student_class": [
    {
      "student_id": 1,
      "class_id": 2
    },
    {
      "student_id": 1,
      "class_id": 1
    },
Nach dem Login kopieren

Struktur:

package studentclass

type studentclasses struct {
    studentclasses []studentclass
}

type studentclass struct {
    studentid int `json:"student_id"`
    classid   int `json:"class_id"`
}
Nach dem Login kopieren

Meine Funktionen:

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

}
Nach dem Login kopieren

Nichts zurückgegeben

Wenn ich json.unmarshall... 之后添加 fmt.println(studentclasses) 时,它返回 {[]} bin json.unmarshal Fehler Null

Ich habe dieses Problem untersucht, aber Leute, die das gleiche Problem wie ich haben, sagten, dass die Felder der Struktur nicht exportiert werden. Beispiel: go json.unmarshal funktioniert nicht Ich weiß nicht, wo der Fehler liegt und was ich falsch gemacht habe Bitte helfen Sie mir, dieses Problem zu lösen. Danke euch allen!

Lösung

Sie haben den JSON-Namen von studentclasses nicht angegeben.

type studentclasses struct {
    studentclasses []studentclass `json:"student_class"`
}
Nach dem Login kopieren

Beispiel:

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)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonjson.Unmarshal funktioniert nicht einmal mit exportierten Feldern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage