gpt4 book ai didi

json - 使用 2 层深的元素解码 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:53 24 4
gpt4 key购买 nike

如何提取 JSON 结构的子部分?

我正在解析一个以下列方式返回数据的 API 调用(为简洁起见进行了删减):

{
"report": [
{
"item1": [
{"name":"somename", "someint":"1", "somefloat":"2.0"}
]
}
]
}

所以在 python 中我会这样做:


data = json.loads(myvar)['report'][0]['item1'][0]
打印数据['名称']

这是如何在 Go 中完成的?我无法更改或调整上游 API。

type MyData struct {
name string
someint int
somefloat float
}

var x MyData

// If I print APICall.buff.Bytes() here I see the valid JSON object I want to parse.

if err := json.Unmarshal(APICall.buff.Bytes(), &MyData); err != nil {
log.Fatal(err)
}

fmt.Printf("%+v\n", MyData)

这运行成功,但我的结构充满了空键。

&{name: someint:0 somefloat:0}

最佳答案

可以使用 map 类型

var x map[string]interface{} // Adapt to match with the JSON structure

或者您可以详细说明 JSON 的所有结构

type Item struct {
Name string `json:"name,omitempty"`
Someint int `json:"Someint,omitempty"` // or string depend on the data type
Somefloat float32 `json:"somefloat,omitempty"` // or string depend on the data type
}

type Report struct {
Report []map[string][]Item `json:"report,omitempty"` // map[string] because it item1 so I assume it can be item2, item3...
}

您需要的正确代码:

package main

import (
"fmt"
"encoding/json"
)

func main() {
type Item struct {
Name string `json:"name,omitempty"`
Someint string `json:"Someint,omitempty"` // or int depend on the data type
Somefloat string `json:"somefloat,omitempty"` // or float32 depend on the data type
}

type Report struct {
Report []map[string][]Item `json:"report,omitempty"` // map[string] because it item1 so I assume it can be item2, item3...
}

var x Report

// If I print APICall.buff.Bytes() here I see the valid JSON object I want to parse.

if err := json.Unmarshal([]byte(`{
"report": [
{
"item1": [
{"name":"somename1", "someint":"1", "somefloat":"2.0"},
{"name":"somename2", "someint":"2", "somefloat":"3.0"}
],
"item2": [
{"name":"somename1", "someint":"1", "somefloat":"2.0"},
{"name":"somename2", "someint":"2", "somefloat":"3.0"}
]
}
]
}`), &x); err != nil {
fmt.Println(err)
}

fmt.Printf("%+v\n%+v", x, x.Report[0]["item1"][0])
}

输出:

{Report:[map[item1:[{Name:somename1 Someint:1 Somefloat:2.0} {Name:somename2 Someint:2 Somefloat:3.0}] item2:[{Name:somename1 Someint:1 Somefloat:2.0} {Name:somename2 Someint:2 Somefloat:3.0}]]]}

{Name:somename1 Someint:1 Somefloat:2.0}

关于json - 使用 2 层深的元素解码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54480019/

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