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

json.Unmarshal funktioniert nicht einmal mit exportierten Feldern

PHPz
PHPznach vorne
2024-02-14 08:12:07777Durchsuche

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

Struktur:

package studentclass

type studentclasses struct {
    studentclasses []studentclass
}

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

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

}

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

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:GoLang: Gocui-RandfarbeNächster Artikel:GoLang: Gocui-Randfarbe