golang - 在实现JSON Marshaler接口时获取标记

时间:2014-05-25 18:31:24

标签: go

在编组下面的Foo实例时,如何在实现json marshaler接口时获取标记信息?请注意,我们也可以使用Bar结构,它也使用MyNullString。所以我们不能假设MyNullString只被Foo struct使用。

package main

import (
  "fmt"
  "database/sql"
  "encoding/json"
)
type MyNullString struct {
   sql.NullString
}

type Foo struct {
    MyInt int64
    MyString MyNullString `json:"my_string,omitempty"` 
}

func (s *MyNullString) MarshalJSON() ([]byte, error){
    //Inspect tag of struct instance and see if this field has to be omitted when empty
    //HOW?????
    //Note: We can use MyNullString in other structs as well. 
}

func main(){
   foo := Foo{MyInt: 1}
   data, _ := json.Marshal(&foo)
   fmt.Println(string(data))
}

1 个答案:

答案 0 :(得分:0)

类型不可能检查包含它的其他类型/值(您无法看到您所在的框,但您可以看到您的框)。有一个自定义omitempty支持的开放功能请求,这样类型可以通知编码器它是一个空的"价值,但此时没有任何用处。见http://golang.org/issue/4357