我可以在 golang 的 json 中将用户定义的值作为数据类型吗
Can i have a user defined value as a data type in json in golang
我正在 golang.I 中创建一个 json 响应有一个问题,我可以生成一个 json 例如:
{
"Name" : "Country",
"Value" : "abc"
}
name 和 value 的值可以根据用户而改变,我使用的结构如下:
type xAxis struct {
Name string,
Value string
}
我希望我的 json 看起来像这样:
{
"Country" : "abc"
}
是否可以像这样创建 json?
您可以通过编写自定义 MarshalJSON
函数来覆盖 Go 的 json 包编组结构的方式:
type xAxis struct {
Name string
Value string
}
func (a xAxis) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{a.Name: a.Value})
}
encoding/json
包允许您使用映射而不是结构。
它的性能可能不如结构,但它确实有效。
data := map[string]string {
"Country": "abc",
"Foo": "bar",
}
// Creating JSON from a map
j, err := json.Marshal(data)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(j))
// ==> {"Country":"abc","Foo":"bar"}
// Creating map from JSON
var data2 map[string]string
err = json.Unmarshal(j, &data2)
if err != nil {
log.Fatal(err)
}
fmt.Println(data2)
// ==> map[Country:abc Foo:bar]
我正在 golang.I 中创建一个 json 响应有一个问题,我可以生成一个 json 例如:
{
"Name" : "Country",
"Value" : "abc"
}
name 和 value 的值可以根据用户而改变,我使用的结构如下:
type xAxis struct {
Name string,
Value string
}
我希望我的 json 看起来像这样:
{
"Country" : "abc"
}
是否可以像这样创建 json?
您可以通过编写自定义 MarshalJSON
函数来覆盖 Go 的 json 包编组结构的方式:
type xAxis struct {
Name string
Value string
}
func (a xAxis) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{a.Name: a.Value})
}
encoding/json
包允许您使用映射而不是结构。
它的性能可能不如结构,但它确实有效。
data := map[string]string {
"Country": "abc",
"Foo": "bar",
}
// Creating JSON from a map
j, err := json.Marshal(data)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(j))
// ==> {"Country":"abc","Foo":"bar"}
// Creating map from JSON
var data2 map[string]string
err = json.Unmarshal(j, &data2)
if err != nil {
log.Fatal(err)
}
fmt.Println(data2)
// ==> map[Country:abc Foo:bar]