在Golang中将多个JSON字段解码为一个

时间:2015-06-25 22:48:14

标签: json go

我正在使用一个API,令人沮丧的是,字段名称因相同值而异。例如,一个API响应可能如下所示:

{
  "PersonFirstName": "John",
  "PersonLastName": "Smith"
}

而另一个看起来像这样:

{
  "FirstNm": "John",
  "LastNm": "Smith"
}

假设我有一个结构,我想解码我的JSON。它可能看起来像这样:

type Name struct {
    FirstName string
    LastName  string
}

如果API一致,我通常可以执行以下操作:

type Name struct {
    FirstName string `json:"PersonFirstName"`
    LastName  string `json:"PersonLastName"`
}

然后使用内置的JSON decoder来构建结构。但是,当有这样的多个字段值时,我不知道将JSON解码为结构的简洁方法。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用map[string]string。这是Go中的等效结构。你因为他们的对象而将这些视为结构,而这是明智之举。每当你看到属性名称的不同值时,你的线索就是地图是Go中数据的唯一合理表示。

如果需要规范化/拥有静态类型,请实现一个名为NameFromMap(data map[string]string) (*Name, error)的辅助函数。将switch语句放在那里以处理密钥的各种值。

修改:您还可以为您的类型实施UnmarshalJSON。你只需把我提到的这个switch语句放在那里。这是一个例子; How do I Unmarshal JSON?

我个人更喜欢我说的第一种方法,因为这种方式抽象出了一个我明确称之为明确的步骤。

相关问题