我正在使用一个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解码为结构的简洁方法。有什么想法吗?
答案 0 :(得分:0)
使用map[string]string
。这是Go中的等效结构。你因为他们的对象而将这些视为结构,而这是明智之举。每当你看到属性名称的不同值时,你的线索就是地图是Go中数据的唯一合理表示。
如果需要规范化/拥有静态类型,请实现一个名为NameFromMap(data map[string]string) (*Name, error)
的辅助函数。将switch语句放在那里以处理密钥的各种值。
修改:您还可以为您的类型实施UnmarshalJSON
。你只需把我提到的这个switch语句放在那里。这是一个例子; How do I Unmarshal JSON?
我个人更喜欢我说的第一种方法,因为这种方式抽象出了一个我明确称之为明确的步骤。