17

私は Mac OS X 10.8.2 で Go 1.0.3 を使用しておりjson、構造体を json にマーシャリングしようとしてパッケージを試していますが、空の{}json オブジェクトを取得し続けています。

値は nil なので関数的には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
}
4

3 に答える 3

40

マーシャリングするフィールドを公開する必要があります。このような:

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

errこれはnil、エクスポートされたすべてのフィールド (この場合は存在しない) が正しくマーシャリングされたためです。

作業例: https://play.golang.org/p/9NH9Bog8_C6

ドキュメントhttp://godoc.org/encoding/json/#Marshalをチェックしてください

于 2013-03-16T16:59:58.600 に答える