Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了golang如何将json解码为结构体大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试解码golang中的一些json,但有些字段没有被解码.
查看浏览器 here中运行的代码

我究竟做错了什么 ?
我只需要MX记录,所以我没有定义其他字段.据我所知,你不需要定义你不使用/不需要的字段.

// You can edit this code!
// Click here and start typing.
package main

import "fmt"
import "encoding/json"

func main() {

    body := `
  {"response": {
  "status": "succesS","data": {
    "mxRecords": [
      {
        "value": "us2.mx3.mailhostBox.com.","ttl": 1,"priority": 100,"hostName": "@"
      },{
        "value": "us2.mx1.mailhostBox.com.",{
        "value": "us2.mx2.mailhostBox.com.","hostName": "@"
      }
    ],"cnameRecords": [
      {
        "aliasHost": "pop.a.co.uk.","canonicalHost": "us2.pop.mailhostBox.com."
      },{
        "aliasHost": "webmail.a.co.uk.","canonicalHost": "us2.webmail.mailhostBox.com."
      },{
        "aliasHost": "smtp.a.co.uk.","canonicalHost": "us2.smtp.mailhostBox.com."
      },{
        "aliasHost": "imap.a.co.uk.","canonicalHost": "us2.imap.mailhostBox.com."
      }
    ],"dkimTxtRecord": {
      "domainname": "20a19._domainkey.a.co.uk","value": "\"v=DKIM1; g=*; k=rsa; p=DkfbhO8Oyy0E1WyUWwIDAQAB\"","ttl": 1
    },"spfTxtRecord": {
      "domainname": "a.co.uk","value": "\"v=spf1 redirect=_spf.mailhostBox.com\"","loginUrl": "us2.cp.mailhostBox.com"
  }
}}`

    type MxRecords struct {
        value    String
        ttl      int
        priority int
        hostName String
    }



    type Data struct {
        mxRecords []MxRecords
    }

    type Response struct {
        Status String `json:"status"`
        Data   Data   `json:"data"`
    }
    type apiR struct {
        Response Response
    }

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

}
根据go documentaiton about json.Unmarshal,你只能解码到导出的字段,主要原因是外部包(例如encoding / json)无法访问未导出的字段.

如果您的json不遵循名称的go约定,则可以在字段中使用json标记来更改json键和struct字段之间的匹配.

例:

package main

import (
    "fmt"
    "encoding/json"
)

type T struct {
    Foo String `json:"foo"`
}

func main() {
    text := []byte(`{"foo":"bar"}`)
    var t T
    err := json.Unmarshal(text,&t)
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}

大佬总结

以上是大佬教程为你收集整理的golang如何将json解码为结构体全部内容,希望文章能够帮你解决golang如何将json解码为结构体所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。