我可以在golang的json中使用用户定义的值作为数据类型吗

我可以在golang的json中使用用户定义的值作为数据类型吗,json,go,Json,Go,我正在golang中创建json响应。我有一个问题,我能够生成json,例如: { "Name" : "Country", "Value" : "abc" } name和value的值可以根据用户和我使用的结构进行更改,如下所示: type xAxis struct { Name string, Value string } 我希望我的json如下所示: { "Country" : "abc" } 可以这样创建json吗?您可以通过编写自定义的MarshalJSON函

我正在golang中创建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})
}

尝试一下:

编码/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]

非常感谢。它真的帮助了我。:)