gpt4 book ai didi

json - 如何将两个具有相同内部结构的 json 解码为一个 golang 结构?

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

我有两个具有以下结构的 json 文件

{
"cast": [
{
"url": "carey-mulligan",
"name": "Carey Mulligan",
"role": "Actress"
},
{
"url": "leonardo-dicaprio",
"name": "Leonardo DiCaprio",
"role": "Actor"
},
.
.
.
]
}

{
"movie": [
{
"url": "carey-mulligan",
"name": "Carey Mulligan",
"role": "Actress"
},
{
"url": "leonardo-dicaprio",
"name": "Leonardo DiCaprio",
"role": "Actor"
},
.
.
.
]
}

如您所见,类型转换和电影的 json 内部结构相同。我想将这些 json 文件解码为相同的 golang 结构。但我无法为同一个结构元素提供两个名称标签(类型转换和电影)。我想要类似的东西

type Detail struct {
Name string `json:"name"`
Url string `json:"url"`
Role string `json:"role"`
}

type Info struct {
Detail []Detail `json:"cast or movie"`
}

在这种情况下,Detail 可以同时解析类型转换和电影。

这是我当前的代码

// RIMAGE project main.go
package main

import (
"encoding/json"
"fmt"
"io/ioutil"
)

const (
website = "https://data.moviebuff.com/"
)

func main() {
fmt.Println("Hello World!")
content, err := ioutil.ReadFile("data/great-getsby")
if err != nil {
panic(err)
}

var info Info

err = json.Unmarshal(content, &info)
if err != nil {
panic(err)
}

fmt.Println(info.Detail)
}

type Detail struct {
Name string `json:"name"`
Url string `json:"url"`
Role string `json:"role"`
}

type Info struct {
Detail []Detail `json:"cast" json:"movie"
}

但它只适用于第一个标签“cast”,并且在 json 包含电影的情况下给出 nill。

提前致谢。

最佳答案

您可以使用 type Info map[string][]Detail 代替您的结构。在 上试用 Go playground

或者您可以在您的结构中同时使用这两种类型,并制作方法 Details() ,它将返回正确的一种:

type Info struct {
CastDetails []Detail `json:"cast"`
MovieDetails []Detail `json:"movie"`
}

func (i Info) Details() []Detail {
if i.CastDetails == nil {
return i.MovieDetails
}
return i.CastDetails
}

上试试 Go playground

关于json - 如何将两个具有相同内部结构的 json 解码为一个 golang 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723274/

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