>  기사  >  백엔드 개발  >  golang이 json을 구문 분석할 수 없으면 어떻게 해야 하나요?

golang이 json을 구문 분석할 수 없으면 어떻게 해야 하나요?

coldplay.xixi
coldplay.xixi원래의
2020-06-24 12:00:584115검색

golang이 json을 구문 분석할 수 없으면 어떻게 해야 하나요?

golang이 json을 구문 분석할 수 없는 문제에 대한 해결책:

golang의 첫 글자를 대문자로 표기한다는 것은 멤버의 접근 권한이 변경되었음을 의미하며, 소문자는 다른 패키지에서 비공개가 될 수 없습니다. 다른 패키지의 비공개 멤버에 액세스하면 json.Marshal(reflect 사용)이 콘텐츠를 반영할 수 없게 됩니다. json.Marshal(其使用了reflect)无法反射到内容。

打个比方,你如果把json.Marshal(hp)这个方法的重新实现在main方法下面,struct中的成员变量就可以小写了。

注意:

struct

예를 들어 기본 메서드에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.