Golang - 處理json
1. 編碼json
-
使用json.Marshal()函數可以對一組數據進行JSON格式的編碼
-
func Marshal(v interface{}) ([]byte, error)
-
通過結構體生成json,結構體屬性字段名首字母要大寫
package main import ( "encoding/json" "fmt" ) type Person struct { Name string Hobby string } func main() { p := Person{"luhan", "男"} //1.生成JSON文本 b, err := json.Marshal(p) if err != nil { fmt.Println("json err:", err) } fmt.Println(string(b)) //2.生成格式化json,沒啥用 b, err = json.MarshalIndent(p, "", " ") if err != nil { fmt.Println("json err:", err) } fmt.Println(string(b)) }
struct tag
-是隱藏字段
也可以直接寫別名,包含首字母小寫的單詞
通過map生成json
package main
import (
"encoding/json"
"fmt"
)
func main() {
//創建map
mmp := make(map[string]interface{})
mmp["name"] = "luhan"
mmp["age"] = 56
mmp["niubility"] = true
//map轉為json
mjson, err := json.Marshal(mmp)
if err != nil {
fmt.Println("json err:", err)
}
fmt.Println(string(mjson))
}
2. 解碼json
解析到結構體
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Hobby string `json:"hobby"`
}
func main() {
//1.准備一段json
b := []byte(`{"Name":"luhan","Hobby":"男"}`)
//2.聲明結構體
var p Person
//3.解析
err := json.Unmarshal(b, &p)
if err != nil {
fmt.Println("json err:", err)
}
fmt.Println(p)
}
解析到interface
package main
import (
"encoding/json"
"fmt"
)
func main() {
//1.准備一段json
b := []byte(`{"Name":"luhan","Hobby":"男"}`)
//2.聲明空接口
var i interface{}
//3.解析
err := json.Unmarshal(b, &i)
if err != nil {
fmt.Println("json err:", err)
}
//自動轉map
fmt.Println(i)
//4.使用interface的json,可以判斷類型
m := i.(map[string]interface{})
for k, v := range m {
switch vv := v.(type) {
case string:
fmt.Println(k, "是string類型", vv)
case int:
fmt.Println(k, "是int類型", vv)
default:
fmt.Println(k, "是其他類型")
}
}
}