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

时间:2015-01-05 09:59:02

标签: json go

我在golang中创建一个json响应。我有一个问题,我能够生成一个json,如:

{
  "Name" : "Country",
  "Value" : "abc"
}

名称和值的值可以根据用户而改变,我使用的结构如下:

type xAxis struct {
  Name string,
  Value string
}

我希望我的json看起来像这样:

{
   "Country" : "abc"
}

是否可以像这样创建json?

2 个答案:

答案 0 :(得分:2)

您可以通过编写自定义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

答案 1 :(得分:0)

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]