首頁 >後端開發 >Golang >即使有導出字段,json.Unmarshal 也不起作用

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

PHPz
PHPz轉載
2024-02-14 08:12:07802瀏覽

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

php小編子墨提示您,即使在進行JSON反序列化時,如果存在導出字段,json.Unmarshal函數也無法正常工作。這是因為JSON解析器只能解析導出字段,而無法辨識非導出字段。因此,在使用json.Unmarshal函數進行反序列化時,需要確保所需字段是導出字段,否則將無法正確解析JSON資料。這是在使用JSON序列化和反序列化時需要注意的一個重要問題,希望能對您有所幫助。

問題內容

json 檔案:

{
  "student_class": [
    {
      "student_id": 1,
      "class_id": 2
    },
    {
      "student_id": 1,
      "class_id": 1
    },

結構:

package studentclass

type studentclasses struct {
    studentclasses []studentclass
}

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

我的功能:

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

}

沒有回傳任何內容

當我在 json.unmarshall... 之後加上 fmt.println(studentclasses) 時,它會傳回 {[]} json.unmarshal 錯誤為零

我研究過這個問題,但是和我有同樣問題的人說結構體的字段沒有導出。例: go json.unmarshal 不起作用 我不知道錯誤在哪裡以及我做錯了什麼 請幫我解決這個問題。謝謝大家!

解決方法

您沒有指定 studentclasses 的 json 名稱。

type studentclasses struct {
    studentclasses []studentclass `json:"student_class"`
}

範例:

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

以上是即使有導出字段,json.Unmarshal 也不起作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除