给定下面的代码,是否可以在名字被解组时转换它?假设我希望它总是小写的,不管它是否在实际的json中。
type Person struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
func main() {
jsonText := GetJsonFromSomewhere()
var v Person
json.Unmarshal(jsonText, &v)
}
1条答案
按热度按时间xmjla07d1#
一种方法是从
encoding/json
包中创建一个自定义类型来实现Unmarshaler
接口。这里有一个到这个接口的链接。任何实现Unmarshaler
的类型都可以在进行JSON解组时用作struct字段的类型。在进行解组时,encoding/json
将使用接口的UnmarshalJSON
函数的实现将JSON字节转换为字段类型。因此,您可以编写一个
UnmarshalJSON
函数,其中包括将字符串值更改为小写。下面是一个可能的示例:
然后,在JSONMap的结构中,可以使用自定义类型代替
string
:如果您解组到这个结构体中,FirstName和LastName的值将是小写的(还要注意,您需要将它们类型转换回
string
以将它们用作string
)。Here is the above code running in Go Playground.