Go 实现JSON封送器接口时获取标记
在封送下面的Foo实例时,在实现JSON封送器接口时,我们如何获得标记信息?注意,我们还可以有一个也使用MyNullString的Bar结构。因此,我们不能假设MyNullString仅由Foo struct使用 包干管Go 实现JSON封送器接口时获取标记,go,Go,在封送下面的Foo实例时,在实现JSON封送器接口时,我们如何获得标记信息?注意,我们还可以有一个也使用MyNullString的Bar结构。因此,我们不能假设MyNullString仅由Foo struct使用 包干管 import ( "fmt" "database/sql" "encoding/json" ) type MyNullString struct { sql.NullString } type Foo struct { MyInt int64
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))
}
类型不可能检查包含它的其他类型/值(您看不到您所在的框,但可以看到您所在的框)。有一个对自定义空支持的开放特性请求,这样类型可以通知编码器它是一个“空”值,但此时没有可用的。请参见查看
reflect
包,特别是从结构中提取StructField
的示例。您可以阅读json实现,看看它们做了什么。这很简单。我想你必须在结构本身上实现MarshalJSON
。好吧!我想我们得等到那时。