Go語言處理JSON

字號+ 編輯: IT男在阿里 修訂: 种花家 來源: 原创 2023-09-10 我要說兩句(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.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評