golang如何将json解码为结构体
发布时间:2020-12-16 19:04:28 所属栏目:大数据 来源:网络整理
导读:我正在尝试解码golang中的一些json,但有些字段没有被解码. 查看浏览器 here中运行的代码: 我究竟做错了什么 ? 我只需要MX记录,所以我没有定义其他字段.据我所知,你不需要定义你不使用/不需要的字段. // You can edit this code!// Click here and start ty
我正在尝试解码golang中的一些json,但有些字段没有被解码.
查看浏览器 here中运行的代码: 我究竟做错了什么 ? // 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) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |