json.Marshal 返回奇怪的结果

我正在尝试将 go 结构转换为 JSON。我以为我知道该怎么做,但我对这个程序的输出感到困惑。我错过了什么?


package main

import "fmt"

import "encoding/json"


type Zoo struct {                                                                       

    name string

    animals []Animal

}

type Animal struct {

    species string

    says string

}


func main() {

    zoo := Zoo{"Magical Mystery Zoo",                                                   

         []Animal {

            { "Cow", "Moo"},

            { "Cat", "Meow"},

            { "Fox", "???"},

        },

    }

    zooJson, err := json.Marshal(zoo)

    if (err != nil) {

        fmt.Println(err)

    }


    fmt.Println(zoo)

    fmt.Println(zooJson)

}

输出:


{Magical Mystery Zoo [{Cow Moo} {Cat Meow} {Fox ???}]}

[123 125]

预期输出(类似的东西):


{Magical Mystery Zoo [{Cow Moo} {Cat Meow} {Fox ???}]}

{

    "name" : "Magical Mystery Zoo",

    "animals" : [{

             "name" : "Cow",

             "says" : "moo"

         }, {

             "name" : "Cat",

             "says" : "Meow"

         }, {

             "name" : "Fox",

             "says" : "???"

         }

    ]

 }

哪里[123 125]来的?



青春有我
浏览 319回答 2
2回答

DIEA

编组的结果是[]byte这样,123并且125是 ascii for {and}必须导出结构字段才能进行编组工作:每个导出的 struct 字段都成为对象的成员

温温酱

您的问题出在结构中的未导出(如果您愿意,可以称之为非公开)字段中。这是 Go Play 上的示例,您可以如何修复它。此外,如果您不喜欢 JSON 字段的命名方式(在大多数情况下为大写字母),您可以使用 struct 标签更改它们(请参阅json.Marshal doc)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go