匹配两个具有不同结构的数组

时间:2019-07-24 21:08:05

标签: json go

我有以下

title, element_id, id
Baker, 1, 1
Plumber, 1, 2
Baker, 2, 3
Plumber, 2, 4
Plumber, 3, 5
Doctor, 1, 6

然后从api中获取所有书籍,并像这样转换它们:

type Book struct {
    Name  string
    Pages int
}

type Library struct {
    Books []Book 
}

但是现在我从另一个api收到另一个var books []Book json.Unmarshal(response, &books) 列表,但是它们具有不同的属性,这就是为什么我添加一个Books属性来区分它们的原因。

MetaData

然后将这两种安排合而为一,并返回json。

type Book struct {
    Name     string
    Page    int
    Metadata MetaData
}

type MetaData struct {
    Type     string `json:"type"`
    Price string `json:"price,omitempty"`
}

我添加了books = append(response.Books, response2.Books...) ,这样当它们不出现时,不要在json中显示它们,就可以了。但是,每次我想添加新的字段/属性时,都必须修改我的书api和上面提到的其他api。我想知道结构是否有可能具有多个字段,或者更愿意接受它们,并且在不适用的情况下不显示它们。您必须说我不能修改相同格式的答案,而且它们都是提供者,而且超出了我的能力范围。这样做的目的是收集amabs答案,并只向前传递一个。

1 个答案:

答案 0 :(得分:0)

如果您想偷懒,可以将它们解组为通用类型map [string] interface {}的数组,而不是Book类型的数组。

var books []map[string]interface{}
err := json.Unmarshal(response, &books)

当然,这使得更难访问具体的书籍属性,但这并非没有可能。