题 我的结构不是编组成json


我在Mac OS X 10.8.2上使用Go 1.0.3,我正在尝试使用 json 包,尝试将结构封送到json,但我一直空着 {} json对象。

err 价值是零,所以根本没有错 json.Marshal 函数,结构是正确的。为什么会这样?

package main

import (
  "encoding/json"
  "fmt"
)

type Address struct {
  street string
  extended string
  city string
  state string
  zip string
}

type Name struct {
  first string
  middle string
  last string
}

type Person struct {
  name Name
  age int
  address Address
  phone string
}

func main() {
  myname := Name{"Alfred", "H", "Eigenface"}
  myaddr := Address{"42 Place Rd", "Unit 2i", "Placeton", "ST", "00921"}
  me := Person{myname, 24, myaddr, "000 555-0001"}

  b, err := json.Marshal(me)

  if err != nil {
    fmt.Println(err)
  }

  fmt.Println(string(b))    // err is nil, but b is empty, why?
  fmt.Println("\n")
  fmt.Println(me)           // me is as expected, full of data
}

16
2018-03-16 16:58


起源


可能重复 Go中带有JSON Marshal的小写JSON密钥名称 - Flimzy


答案:


你必须制作你想要公开的领域。 喜欢这个:

type Address struct {
  Street string
  Extended string
  City string
  State string
  Zip string
}

err 是 nil 因为所有导出的字段(在这种情况下都没有)被正确编组。

工作范例: http://play.golang.org/p/0Q8TIvZwuj

查看文档 http://godoc.org/encoding/json/#Marshal


36
2018-03-16 16:59



就是这样,我掩盖了“每个人” 出口 struct field“。谢谢。 - tlehman
谢谢你指出“公众”。 - khue bui


请注意,您还可以通过执行以下操作来操作生成的JSON中字段的名称:

type Name struct {
  First string `json:"firstname"`
  Middle string `json:"middlename"`
  Last string `json:"lastname"` 
}

5
2018-02-05 04:38



我喜欢这种关联结构和json对象的方式。 - tlehman