gpt4 book ai didi

go - 解析嵌套的 JSON 字符串

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

我正在尝试解析嵌套的 json 字符串

我确实通过使用多个结构让它工作,但我想知道我是否可以在不使用额外结构的情况下解析 JSON。

type Events struct {
Events []Event `json:"events"`
}

type Event struct {
Name string `json:"name"`
Url string `json:"url"`
Dates struct {
Start struct {
LocalDate string
LocalTime string
}
}
}

type Embed struct {
TM Events `json:"_embedded"`
}

func TMGetEventsByCategory(location string, category string) {
parameters := "city=" + location + "&classificationName=" + category + "&apikey=" + api_key
tmUrl := tmBaseUrl + parameters
resp, err := http.Get(tmUrl)
var embed Embed
var tm Event
if err != nil {
log.Printf("The HTTP request failed with error %s\n", err)
} else {
data, _ := ioutil.ReadAll(resp.Body)

err := json.Unmarshal(data, &embed)
json.Unmarshal(data, &tm)

}
}

JSON 数据如下所示:

{
"_embedded": {
"events": [],
},
"OtherStuff": {
}
}

是否可以摆脱 Embed 结构并直接读取 json 字符串的事件部分?

最佳答案

您在这里寻找的是 json.RawMessage。它可以帮助延迟某些值的解析,在你的情况下 map[string]json.RawMessage 应该代表你可以有选择地解析值的顶级对象。这是一个您可以根据自己的情况进行调整的简化示例:

package main

import (
"encoding/json"
"fmt"
)

type Event struct {
Name string `json:"name"`
Url string `json:"url"`
}

func main() {
bb := []byte(`
{
"event": {"name": "joe", "url": "event://101"},
"otherstuff": 15.2,
"anotherstuff": 100
}`)

var m map[string]json.RawMessage
if err := json.Unmarshal(bb, &m); err != nil {
panic(err)
}

if eventRaw, ok := m["event"]; ok {
var event Event
if err := json.Unmarshal(eventRaw, &event); err != nil {
panic(err)
}
fmt.Println("Parsed Event:", event)
} else {
fmt.Println("Can't find 'event' key in JSON")
}
}

在您的情况下,查找 _embedded 键,然后将其值Unmarshal Events

关于go - 解析嵌套的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54621860/

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