ホームページ  >  記事  >  バックエンド開発  >  golang が json を解析できない場合はどうすればよいですか?

golang が json を解析できない場合はどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-06-24 12:00:584100ブラウズ

golang が json を解析できない場合はどうすればよいですか?

Golang は json ソリューションを解析できません:

golang の最初の文字の場合は、メンバーのアクセスを意味します変更されました アクセス許可の小文字はプライベートになります。異なるパッケージは他のパッケージのプライベート メンバーにアクセスできないため、json.Marshal (reflect を使用する) がコンテンツを反映できなくなります。

たとえば、main メソッドの下で json.Marshal(hp) メソッドを再実装する場合、構造体のメンバー変数を小文字にすることができます。

注:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。