gpt4 book ai didi

json - 根据 key 解码 JSON

转载 作者:IT王子 更新时间:2023-10-29 01:34:27 25 4
gpt4 key购买 nike

我正在从网络接收 JSON 格式的数据,我需要根据 key 对其进行解码。
这是数据示例:

{
"foo": {
"11883920": {
"fieldA": 123,
"fieldB": [
{
"fieldC": "a",
"fieldD": 1173653.22
}
]
}
},
"bar": {
"123": {
"fieldE": 123
}
}
"anyOtherkey": {...}
}

逻辑是,如果键是 foo,它应该被解码为 fooStruct,如果 bar - 作为 条形结构。实现此逻辑的最佳方法是什么? (我不想将它解码为 map[string]interface{},也许可以使用 json.NewDecoder() 函数,但我无法获得预期的结果结果)。

最佳答案

只需创建一个同时包含两个字段的类型:

type MyType struct {
Foo *fooStruct `json:"foo,omitempty"`
Bar *barStruct `json:"bar,omitempty"`
OtherKey string `json:"other_key"`
}

将 JSON 解码为该类型,并简单地检查 ig Foo 和/或 Bar 是否为 nil 以了解您正在使用的数据。

这里有一个 Playground Demo这会是什么样子

它的本质是:

type Foo struct {
Field int `json:"field1"`
}

type Bar struct {
Message string `json:"field2"`
}

type Payload struct {
Foo *Foo `json:"foo,omitempty"`
Bar *Bar `json:"bar,omitempty"`
Other string `json:"another_field"`
}

FooBar 字段是指针类型,因为值字段会使确定实际设置了哪个字段更加麻烦。 omitempty 位允许您编码相同类型以重新创建原始有效负载,因为 nil 值不会显示在输出中。

要检查在原始 JSON 字符串中设置了哪个字段,只需编写:

var data Payload
if err := json.Unmarshal([]byte(jsonString), &data); err != nil {
// handle error
}
if data.Foo == nil && data.Bar == nil {
// this is probably an error-case you need to handle
}
if data.Foo == nil {
fmt.Println("Bar was set")
} else {
fmt.Println("Foo was set")
}

仅此而已

关于json - 根据 key 解码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54363910/

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