如何编组匿名结构?

时间:2018-01-30 16:03:30

标签: go struct

为什么在尝试编组匿名结构时会得到{}

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

如果您使用以下结构,Marshal方法将忽略id,因为它不会被导出。

struct{id int}{123}

您需要导出它们以使其保持转换过程。

  

在Go中,如果名称以大写字母

开头,则会导出该名称
js, _ := json.Marshal(struct{Id int}{123})
os.Stdout.Write(js)
// {"Id":123}