首頁 >後端開發 >Golang >golang無法解析json怎麼辦?

golang無法解析json怎麼辦?

coldplay.xixi
coldplay.xixi原創
2020-06-24 12:00:584129瀏覽

golang無法解析json怎麼辦?

golang無法解析json的解決方案:

golang首字母大小寫意味著改變了成員的訪問權限,小寫變成私有的了,不同package是無法存取其他package的私有成員的,導致json.Marshal(其使用了reflect)無法反射到內容。

打個比方,你如果把json.Marshal(hp)這個方法的重新實作在main方法下面,struct中的成員變數就可以小寫了。

注意:

struct內的成員變數小寫就只有目前套件內可以存取。

Golang HTTP請求Json回應解析方法

回應資料如下:

{
"number": 3,
"message": "success",
"people": [{
"craft": "ISS",
"name": "Chris Cassidy"
}, {
"craft": "ISS",
"name": "Anatoly Ivanishin"
}, {
"craft": "ISS",
"name": "Ivan Vagner"
}]
}

下面是一個http請求並解析json資料到結構體裡的範例

package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
)
type people struct {
Number int `json:"number"`
}
func main() {
url := "http://api.open-notify.org/astros.json"
spaceClient := http.Client{
Timeout: time.Second * 2, // Maximum of 2 secs
}
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("User-Agent", "spacecount-tutorial")
res, getErr := spaceClient.Do(req)
if getErr != nil {
log.Fatal(getErr)
}
if res.Body != nil {
    defer res.Body.Close()
}
body, readErr := ioutil.ReadAll(res.Body)
if readErr != nil {
log.Fatal(readErr)
}
people1 := people{}
jsonErr := json.Unmarshal(body, &people1)
if jsonErr != nil {
log.Fatal(jsonErr)
}
fmt.Println(people1.Number)
}

推薦教學:《go語言教學

#

以上是golang無法解析json怎麼辦?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn