GoLang结构体解析多维复杂json 坑了2天,毕竟还是我太弱了

时间:2025-03-08 09:41:39

自己无论怎么写就是不成成功,最后解决方案,通过网络上一位老铁的源码复制过来一个一个改成我自己的结构造型才成功。
代码贴出备忘

package main
// 

import "fmt"
import "encoding/json"

type Detail struct {
	Time string `json:"time"`
	Ops  string `json:"ops"`
}

type Version struct {
	Last   string   `json:"last"`
	Max    int      `json:"max"`
	Detail []Detail `json:"detail"`
}

type Desc struct {
	Date    string  `json:"date"`
	Content string  `json:"content"`
	Brief   string  `json:"brief"`
	Keyword string  `json:"keyword"`
	Version Version `json:"version"`
}

type Response struct {
	Url     string   `json:"url"`
	Title   string   `json:"title"`
	Email   string   `json:"email"`
	Admin   string   `json:"admin"`
	Address []string `json:"address"`
	Article []Desc   `json:"article"`
}

func main() {
	body := `
  {
      "url": "",
      "title": "golang and python",
      "admin": "fengyun",
      "email": "rfyiamcool@",
      "address": [
          "beijing",
          "qingdao"
      ],
      "article": [
          {
              "date": "2014",
              "content": "golang json push to redis server",
              "brief": "golang json",
              "keyword": "json",
              "version": {
                  "max": 3,
                  "last": "2016-03-11",
                  "detail": [
                      {
                          "time": "2016-03-12",
                          "ops": "add my email"
                      }
                     ]
                  }
          }
      ]
  }
  `

	var r Response
	err := json.Unmarshal([]byte(body), &r)
	if err != nil {
		fmt.Printf("err was %v", err)
	}

	fmt.Println(r.Article[0].Version.Max)
	fmt.Println(r.Article[0].Version.Detail[0].Ops)

}

下面是我自己想要解析的结构源码

package main
// 

import "fmt"
import "encoding/json"


type Version struct {
	Last   string   `json:"last"`
	Max    int      `json:"max"`
}

type Desc struct {
	Version []Version `json:"data"`
}

type Response struct {
	Article Desc   `json:"list"`
}

func main() {
	body := `
  {
      "list": 
          {
              "data": [{
                  "max": 3,
                  "last": "2016-03-11",
                  "detail": [
                      {
                          "time": "2016-03-12",
                          "ops": "add my email"	
                      }
                     ]
                  }]
          }
      
  }
  `

	var r Response
	err := json.Unmarshal([]byte(body), &r)
	if err != nil {
		fmt.Printf("err was %v", err)
	}

	fmt.Println(r.Article.Version[0].Max)

}