如何编组匿名结构体?

5

当尝试对匿名结构进行编组时,为什么会得到 {}

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    js, err := json.Marshal(struct{id int}{123})
    if err != nil {
        fmt.Println("error:", err)
    }
    os.Stdout.Write(js)
}

https://play.golang.org/p/lEqJ1uj1ezS


你为什么要使用 os.Stdout.Write()fmt.Print 直接转发到它。 - Kaedys
2个回答

12

https://play.golang.org/p/XNAKovWGhxk

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    jsonString, err := json.Marshal(
        struct{
            Id int `json:"theKeyYouWantToUse"`
        } {
            123
        },
    )

    if err != nil {
        fmt.Println("error:", err)
    }

    os.Stdout.Write(jsonString)
}

您没有导出 id 属性,请将其更改为 Id。


除非您需要在结构体与JSON中使用不同的字段名称,否则json字段标签是不必要的。 - Adrian

8
如果你使用以下的结构体,Marshal方法将会忽略id字段,因为它没有被导出。
struct{id int}{123}

您需要将它们导出以保留转换过程。

在Go语言中,如果名称以大写字母开头,则表示该名称已被导出。

js, _ := json.Marshal(struct{Id int}{123})
os.Stdout.Write(js)
// {"Id":123}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接