一尘不染

为什么结构字段显示为空?

go

我正在努力从以下代码中获取正确的输出:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {

    var jsonBlob3 = []byte(`[
        {"name": "Platypus", "spec": "Monotremata", "id":25 },
        {"name": "Quoll",    "spec": "Dasyuromorphia", "id":25 }
    ]`)
    type Animal2 struct {
        name  string
        spec string
        id uint32
    }
    var animals []Animal2
    err := json.Unmarshal(jsonBlob3, &animals)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%+v\n", animals)
}

游乐场片段

打印时,结构字段为空。我敢肯定某个地方有一个愚蠢的错误,但是我仍然对Go还是陌生的,而且我已经在这里呆了几个小时。请帮忙。


阅读 334

收藏
2020-07-02

共1个答案

一尘不染

这已经出现了很多次了。问题在于只能对导出的字段进行封送处理。

通过以大写(大写)字母开头来导出结构域。

type Animal2 struct {
    Name  string
    Spec string
    Id uint32
}

Go Playground上尝试一下。

请注意,JSON文本包含带有小写字母文本的字段名称,但是json包足够“聪明”以匹配它们。如果它们完全不同,则可以使用struct标记来告诉json程序包如何在JSON文本中找到它们(或应如何封送它们),例如:

type Animal2 struct {
    Name  string `json:"json_name"`
    Spec string  `json:"specification"`
    Id uint32    `json:"some_custom_id"`
}
2020-07-02