【发布时间】:2020-01-12 19:25:41
【问题描述】:
我正在创建一个 Go 应用程序,它使用来自多个来源的数据,这些来源都具有相似的数据,但其数据/响应的结构不同。这些响应需要编组到一个公共结构中,然后发送到另一个服务。
通用结构:
type common struct {
ID string `json:id`
GivenName string `json:given_name`
FamilyName string `json:family_name`
Email: string `json:email`
}
一个回应:
{
"id": "123",
"first_name": "john",
"last_name": "smith",
"email": "js@mail.com"
}
另一个回应:
{
"id": "456",
"first": "larry",
"last": "smith",
"email": {
"primary": "larry@mail.com"
}
}
如何将具有一种结构的 json 响应编组为具有不同结构的结构?
【问题讨论】:
-
如果不是该电子邮件字段,您可以创建两个具有不同 json 标签的相同结构,并简单地说 v1=v2 其中 v1 是一个结构,v2 是另一个。但是通过电子邮件翻译这是不可能的。您仍然可以做两个结构,并逐个字段地从一个结构复制到另一个。
-
您不能将 encoding/json 与一个结构和不同的名称一起使用。死的简单。您要么必须具有具有不同标签的不同结构,要么使用例如一个 map[string]interface{} 作为序列化的源。在任何情况下,您都必须复制。或者您自己编写 JSON 序列化。
标签: json go struct marshalling