Go 解析嵌套 json


寫項目的時候,請求了一個接口,發現返回的json數據,多層嵌套的,而且嵌套的第二層data是數組,第三層的news也是數組

所以需要寫多個嵌套json進行解析,使用json.Unmarshal 進行嵌套結構體的解析

json截圖為:

 

 

代碼實例:

package main

import (
	"encoding/json"
	"io/ioutil"
	"net/http"
	"net/url"
	"fmt"
)

type HotNews struct {
	Code int `json:"code"`
	Status string	`json:"status"`
	Msg string	`json:"msg"`
	Data []Datas `json:"data"`
}

type Datas struct {
	Symbol string `json:"symbol"`
	Hot int	`json:"hot"`
	News []NewsInfo	`json:"news"`
}

type NewsInfo struct {
	Symbol string	`json:"symbol"`
	News_id string	`json:"news_id"`
	Hot string	`json:"hot"`
	Url string	`json:"url"`
	Title string	`json:"title"`
	Pv string	`json:"pv"`
	Pub_time string	`json:"pub_time"`
	Source string	`json:"source"`
}

func getData(urlApi string) (body []byte,err error) {
	apiUrl :=urlApi
	u,err := url.ParseRequestURI(apiUrl)
	if err !=nil{
		fmt.Println("request url failed err:",err)
		return nil,err
	}
	//u.RawQuery = data.Encode()
	fmt.Println(u.String())
	resp,err := http.Get(u.String())
	if err !=nil{
		fmt.Println("get url failed err :",err)
		return nil,err
	}
	defer resp.Body.Close()
	body,err = ioutil.ReadAll(resp.Body)
	if err !=nil{
		fmt.Println("read body failed err :",err)
		return nil,err
	}
	return body,nil
}

func main() {
	var hn HotNews
	urlApi := "https://xxx/hot"
	body,err := getData(urlApi)
	if err !=nil{
		fmt.Println("get data failed err:",err)
		return
	}
	err = json.Unmarshal(body,&hn)
	if err !=nil{
		fmt.Println("unmarshal failed err:",err)
		return
	}
	fmt.Println(hn.Code)
	fmt.Println(hn.Data)
	for _,v:= range hn.Data{
		for _,n := range v.News{
			fmt.Println(n.Source)
		}
	}
}

  


免責聲明!

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



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