首页 > 解决方案 > 如何在 Go 语言中解组 Json 字符串以仅获取一个键的值

问题描述

所以我需要解码一个 json 字符串来获取ID的值,但是我无法找到一种方法来只提取一个键的值,所以我创建了一个整个 json 字符串的结构,以便我可以组它以提取信息但是我认为我的结构有问题,因为我没有得到任何输出

package main

import (
    "fmt"
    "encoding/json"
)
type season struct{
    Data []seasoninfo `json:"seasoninfo"`
}
type seasoninfo struct{
    Aliases []string
    Banner string
    FirstAired string
    Id int
    Network string
    Overview string
    SeriesName string
    Slug string
    Status string
}
func main() {
    s := `{"data":[{"aliases":[],"banner":"graphical/81189-g21.jpg","firstAired":"2008-01-20","id":81189,"network":"AMC","overview":"Walter White, a struggling high school chemistry teacher, is diagnosed with advanced lung cancer. He turns to a life of crime, producing and selling methamphetamine accompanied by a former student, Jesse Pinkman, with the aim of securing his family's financial future before he dies.","seriesName":"Breaking Bad","slug":"breaking-bad","status":"Ended"},{"aliases":[],"banner":"","firstAired":"","id":356427,"network":"AMC","overview":null,"seriesName":"Breaking Bad: Original Minisodes","slug":"breaking-bad-original-minisodes","status":"Ended"},{"aliases":["Breaking Bad (ES)"],"banner":"graphical/273859-g.jpg","firstAired":"2014-06-08","id":273859,"network":"Univision","overview":"“Metastasis” is the story of a struggling high school chemistry teacher who is diagnosed with inoperable lung cancer. He turns to a life of crime, producing and selling meth with a former student in order to secure his family’s financial future before he passes away.","seriesName":"Metastasis","slug":"metastasis","status":"Ended"}]}`
    var series season
    err:=json.Unmarshal([]byte(s),&series)
    if err==nil{
        fmt.Println(series)
    } else{
        fmt.Println("wrong")
    }
}

输出是 {[]}

https://play.golang.org/p/5jYSp4cMCok

谢谢

标签: go

解决方案


问题是您当前正在尝试将 struct fieldData与 JSON property key匹配seasoninfo。但是,您的示例 JSON 输入没有seasoninfo作为外部属性,而是data作为外部属性。要么更改json:"seasoninfo"json:"data"

type season struct{
  Data []seasoninfo `json:"data"`
}

这是一个实际的例子

或者更简单,您可以考虑简单地删除该json:"data"部分,如struct 字段data的 JSON 匹配项:Data

这是一个实际的例子

type season struct{
    Data []seasoninfo
}

希望这会有所帮助!


推荐阅读