gpt4 book ai didi

json - 在 golang 中解码平面和嵌套的 json

转载 作者:IT王子 更新时间:2023-10-29 02:03:06 24 4
gpt4 key购买 nike

假设我希望能够处理以下形式的嵌套和非嵌套 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 的宠物得到充分安排。

{John {Rose Dog}}
{Doe { }}

但由于 Pet 实际上也可以是 Pet 的一部分,Doe 的 Pet 没有正确解码。如果改为使用

type Owner struct {
Name string
Pet []Pet
}

然后 Doe 就很好地编码了。

{John []}
{Doe [{Rose Dog} {Max Cat}]}

我怎样才能捕捉到这两种情况?

无论如何,我宁愿最后将它编码到一片 Pet 中。

最佳答案

您正在查看两个独立的数据结构,因此要使用单个 struct 类型对它们进行解码,您需要同时考虑两者:

type Owner struct {
Name string
Pet
Pets []Pet `json:"Pet"`
}

然后,如果你希望 slice 是权威的,在你解码后,将嵌入移动到 slice :

// owner := unmarshall blah blah
if owner.Pet != Pet{} {
owner.Pets = append(owner.Pets, owner.Pet)
}

关于json - 在 golang 中解码平面和嵌套的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com