gpt4 book ai didi

json - 如何将json解码为结构

转载 作者:IT王子 更新时间:2023-10-29 01:06:33 24 4
gpt4 key购买 nike

我正在尝试在 Go 中解码一些 json,但有些字段没有被解码。查看浏览器中运行的代码here :

我做错了什么?

我只需要 MX 记录,所以我没有定义其他字段。正如我从 godoc 中了解到的那样,您不需要定义不使用/不需要的字段。

// 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.",
"ttl": 1,
"priority": 100,
"hostName": "@"
},
{
"value": "us2.mx2.mailhostbox.com.",
"ttl": 1,
"priority": 100,
"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\"",
"ttl": 1
},
"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)

}

最佳答案

根据关于 json.Unmarshal 的 go 文档,只能对exported fields解码,主要原因是外部包(如encoding/json)无法访问未导出的字段。

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

例子:

package main

import (
"fmt"
"encoding/json"
)

type T struct {
Foo string `json:"foo"`
priv string `json:"priv"`
}

func main() {
text := []byte(`{"foo":"bar", "priv":"nothing"}`)
var t T
err := json.Unmarshal(text, &t)
if err != nil {
panic(err)
}
fmt.Println(t.Foo) // prints "bar"
fmt.Println(t.priv) // prints "", priv is not exported
}

关于json - 如何将json解码为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com