Golang如何从其余API JSON响应中获取特定密钥(从多结构)

Golang如何从其余API JSON响应中获取特定密钥(从多结构)

问题描述:

Required json specific key: status -> name and id values only

getUrl := "https://www.test.com" 

reqTransitionID, err := http.NewRequest("GET", getUrl, nil)

respTransitionID, err := client.Do(reqTransitionID)

if err != nil {
    log.Fatal(err)
}
defer respTransitionID.Body.Close()

type Statuskey struct {
    Id   string `json:"id"`
    Name string `json:"name"`
}

type TransitionID struct {
    Status Statuskey `json:"status"`
}

jsonData, errrr := ioutil.ReadAll(respTransitionID.Body)
if errrr != nil {
    fmt.Println("Error reading JSON data:", errrr)
    return
}

fmt.Println(string(jsonData))
var ss TransitionID
json.Unmarshal(jsonData, &ss)
fmt.Println(ss.Status)
fmt.Println(ss.Status.Id)
fmt.Println(ss.Status.Name)

My Json response is :

{  
   "expand":"demo",
   "id":"825",
   "self":"TEST",
   "key":"TEST",
   "fields":{  
      "status":{  
         "self":"tst",
         "description":"test",
         "iconUrl":"test",
         "name":"Closed",
         "id":"6",
         "statusCategory":{  
            "self":"test",
            "id":3,
            "key":"done",
            "colorName":"green",
            "name":"Done"
         }
      }
   }
}

jsonDataSrc, errrr := ioutil.ReadAll(respTransitionID.Body)

                        if errrr != nil {
                            fmt.Println("Error reading JSON data:", errrr)
                            return
                        }

                        type Status struct {
                            Name string `json:"name"`
                            Id   string `json:"id"`
                        }

                        type Fields struct {
                            Status Status `json:"status"`
                        }

                        type JsonResponse struct {
                            Fields Fields `json:"fields"`
                        }

                        res := JsonResponse{}
                        json.Unmarshal([]byte(jsonDataSrc), &res)

                        fmt.Println(res.Fields.Status.Id)
                        fmt.Println(res.Fields.Status.Name)

output - 6 Closed