go接收json數據處理


go對json數據進行解碼,有兩種方式:

client := &http.Client{}
request, err := http.NewRequest("GET", "http://dev.babysleep.com/home/admin/user", nil)
if err != nil {
    log.Fatal(err)
}
response, _ := client.Do(request)

// 方式一:json.Unmarshal()
b, err := ioutil.ReadAll(response.Body)
if err != nil {
    log.Println("err=>", err)
}
data = []byte(string(b))
err = json.Unmarshal(data, &user)
適用場景:如果要處理的JSON數據已經存在內存中,使用json.Unmarshal

// 方式二:json.NewDecoder()
err := json.NewDecoder(response.Body).Decode(&user)
適用場景:如果數據來自io.Reader流,或者需要從數據流中解碼多個值,使用json.Decoder
         http請求的讀取,也屬於流的讀取

解碼的時候 如果要轉為結構體類型,需要注意的點是:要保證json的數據字段與要轉化的結構體的字段一致,字段類型一致,如果不一致,需要做一些額外的處理。比如:

// 網站基礎導航結構
type Menu struct {
	Id        int                 `json:"id,string"`    // json數據中,id為string類型
	Text      string              `json:"text"`
	Active    bool                `json:"-"`        // json數據中不顯示Active字段
	Icon      string              `json:"icon"`
	Href      string              `json:"href"`
	Css       []string            `json:"css,omitempty"`    //omitempty指定如果值為空,可以忽略該值
	PluginCss []string            `json:"pluginCss,omitempty"`
        Js        map[string][]string `json:"js,omitempty"`  
	PluginJs  map[string][]string `json:"pluginJs,omitempty"`
	Children  []Menu              `json:"children,omitempty"`
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM