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

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

package main
// xiaorui.cc

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": "http://xiaorui.cc",
      "title": "golang and python",
      "admin": "fengyun",
      "email": "rfyiamcool@163.com",
      "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
// xiaorui.cc

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)

}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱折腾的小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值