利用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