Go語言處理JSON之——利用Marshal生成json字符串(一)

利用Go語言內置的encodong/json標準庫,我們可以輕鬆地生成和解析json格式的數據。
func Marshal(v interface{}) ([]byte, error)
1
從返回值我們可以看到,該函數有兩個返回值,一個是傳入參數v的json編碼,類型爲[]byte,另外一個就是error。
官方文檔提供了一個例子:
package main

import (
    "fmt"
    "encoding/json"
)

type ColorGroup struct {
    ID     int
    Name   string
    Colors []string
}

func main() {
    group := ColorGroup {
        ID:     1,
        Name:   "Reds",
        Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
    }

    b, err := json.Marshal(group)
    if err != nil {
        fmt.Println("error:", err)
    }
    
    fmt.Println(string(b))
}
123456789101112131415161718192021222324252627
輸出:
{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}
1
大家看到了,我們定義的結構體中的變量名都是大寫,這是怎麼回事呢?原來只有大寫的變量,才能導出。
把上面的代碼稍微改變一下,將name變成小寫,看看會發生什麼。
package main

import (
    "fmt"
    "encoding/json"
)

type ColorGroup struct {
    ID     int
    name   string  //這裏的name爲小寫
    Colors []string
}

func main() {
    group := ColorGroup {
        ID:     1,
        name:   "Reds", //這裏的name爲小寫
        Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
    }

    b, err := json.Marshal(group)
    if err != nil {
        fmt.Println("error:", err)
    }
    
    fmt.Println(string(b))
}
123456789101112131415161718192021222324252627
輸出:
{"ID":1,"Colors":["Crimson","Red","Ruby","Maroon"]}
1
爲了在輸出的json字符串中用小寫表示,該怎麼處理呢?go也提供了辦法。
就是給字段加標籤:
舉例:
type ColorGroup struct {
    ID     int
    Name   string  `json:"name"`
    Colors []string
}
12345
我們在Name後面加了字段標籤,注意是反單引號包起來的,就是鍵盤上Tab鍵的上方的那個鍵。
這個字段標籤的意思是,導出的時候,用name名。
輸出結果:
{"ID":1,"name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}
1
這字段標籤還有其他的用法,比如:
type ColorGroup struct {
    ID     int
    Name   string  `json:"-"`
    Colors []string
}
12345
這時候的輸出結果就爲:
{"ID":1,"Colors":["Crimson","Red","Ruby","Maroon"]}
1

// 字段被本包忽略
Field int json:"-"
// 字段在json裏的鍵爲"myName"
Field int json:"myName"

詳細的用法可以參考go官方文檔,這裏就不一一列舉了。
https://studygolang.com/pkgdoc
查看encoding/json
最後,我們看一個具體的實例:
{
    "first fruit":
    {
        "describe":"an apple",
        "icon":"appleIcon",
        "name":"apple"
    },
    "second fruit":
    {
        "describe":"an orange",
        "icon":"orangeIcon",
        "name":"orange"
    },
    "three fruit array":
    [
        "eat 0",
        "eat 1",
        "eat 2",
        "eat 3",
        "eat 4"
    ]
}
12345678910111213141516171819202122
比如,我們要生成這樣一個json字符串,go語言該怎麼寫呢?
在第二篇博客中有詳細代碼:https://blog.csdn.net/hp_cpp/article/details/101055909
參考:Go的json解析:Marshal與Unmarshal

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章