假设我希望能够处理以下表单的嵌套和未嵌套json
,如下例所示:
source_json_1 := `{"owner": "John", "nickname": "Rose", "species": "Dog"}`
source_json_2 := `{"owner": "Doe", "Pet": [{"nickname": "Rose", "species": "Dog"},
{"nickname": "Max", "species": "Cat"}]}`
如果我将Pet
定义为嵌入式结构,我可以使用以下方法轻松解组:
type Owner struct {
Name string
Pet
}
type Pet struct {
NickName string
Species string
}
导致约翰的宠物得到充分的编组。
{John {Rose Dog}}
{Doe { }}
但由于Pet
实际上也可以是Pet
的一部分,因此Doe的Pet
未被正确解组。如果改为
type Owner struct {
Name string
Pet []Pet
}
然后Doe被编组好了。
{John []}
{Doe [{Rose Dog} {Max Cat}]}
我怎样才能抓住这两种情况?
无论如何,我最好还是把它编成一片Pet
s。
答案 0 :(得分:2)
您正在查看两个单独的数据结构,因此要使用单个struct
类型解组它们,您需要考虑两者:
type Owner struct {
Name string
Pet
Pets []Pet `json:"Pet"`
}
然后,如果您希望切片具有权威性,则在取消编组后,将嵌入式移动到切片:
// owner := unmarshall blah blah
if owner.Pet != Pet{} {
owner.Pets = append(owner.Pets, owner.Pet)
}