Go语言处理JSON

字号+ 编辑: 秦朝 修订: 秦朝 来源: 原创 2015-02-07 11:38:18 我要说两句(0)

本文介绍如何使用Go语言来解析JSON串。

    对于简单JSON的encode是这样的:

if bs, err := json.Marshal(m);
err != nil {
    panic(err)
}

如何解析比较复杂的JSON串呢?笔者找了一个代码demo,希望通过demo说清楚go是如何解析的。

package main

import "fmt"
import "encoding/json"

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 `json:"response"`
}

func main() {
 body := `{
    "response":
    {
        "status":"SUCCESS",
        "data":
        {
            "mxRecords":
            [
                {
                    "value":"us2.mx3.mailhostbox.com.",
                    "ttl":1,
                    "priority":100,
                    "hostName":"hostname@"
                },
                {
                    "value":"us2.mx1.mailhostbox.com.",
                    "ttl":1,
                    "priority":100, "hostName":"hostnam233e@"
                },
                {
                    "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"
        }
    }
}`
 var r apiR
 err := json.Unmarshal([]byte(body), &r)
 if err != nil {
 fmt.Printf("err was %v", err)
}
 // 表示json转换成struct之后的内部某块值
 fmt.Println(r.Response.Data.MxRecords[1].HostName)
}

根据以上代码来看,解析json的思路就是先根据json的实际情况,先定义struct,之后再逐层的根据内部数据类型来处理。

阅完此文,您的感想如何?
  • 鼓掌

    0

  • 鄙视

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.转来的文章都会标好来源,如对来源资料存疑,请邮件声明;
2.本站标注原创的文章,转发时烦请注明来源;
3.如文章侵犯了您的版权,请通知本站,该文章将在24小时内移除。

相关课文
  • go在arm上读取串口数据

  • Go语言框架之对比

  • go调用c使用比官方Cgo性能更加突出的c2goasm项目

  • Go语言去除html标签标记的方法

我要说说
网上宾友点评