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, "是其他类型")
      }
   }
}