gpt4 book ai didi

json - 将多个 JSON 类型解析为同一个结构

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

我正在请求一个返回包含对象数组的 JSON 的 API。问题是对象可以有两种形式。它们可以是字符串或对象。示例结果可能如下所示:

[
{"name": "obj1", "key2": ["a", "b"]},
"obj2",
{"name": "obj3"}
]

字符串元素 "objX" 等同于 {"name": "objX"}

我想将其解析为以下类型的 slice :

type Obj struct {
Name string
Key2 []string
}

我如何以合理的方式做到这一点?

最佳答案

package main

import (
"encoding/json"
"fmt"
)

type Obj struct {
Name string `json:"name"`
Key2 []string `json:"key2"`
}

func (o *Obj) UnmarshalJSON(b []byte) error {
var name string
if err := json.Unmarshal(b, &name); err == nil {
*o = Obj{}
o.Name = name
return nil
}

type Obj2 Obj
var o2 Obj2
if err := json.Unmarshal(b, &o2); err != nil {
return err
}
*o = Obj(o2)
return nil
}

const payload = `[
{"name": "obj1", "key2": ["a", "b"]},
"obj2",
{"name": "obj3"}
]
`

func main() {
var objs []*Obj
if err := json.Unmarshal([]byte(payload), &objs); err != nil {
panic(err)
}
for _, obj := range objs {
fmt.Printf("Name:%v, Key2:%v\n", obj.Name, obj.Key2)
}
}

https://play.golang.org/p/rmtSOpkYqp

关于json - 将多个 JSON 类型解析为同一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057240/

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