我可以在 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})
}

尝试一下:http://play.golang.org/p/G_E4IpNYIz

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]