json是前后端交互不可缺少的数据格式
生成json可以用Marshal
通过结构体生成json
func Marshal(v interface{}) ([]byte, error)
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Hobby string `json:"hobby"`
}
func main() {
p := Person{"5lmh.com", "女"}
// 编码json
b, err := json.Marshal(p)
if err != nil {
fmt.Println("json err ", err)
}
fmt.Println(string(b))
// 格式化输出
b, err = json.MarshalIndent(p, "", " ")
if err != nil {
fmt.Println("json err ", err)
}
fmt.Println(string(b))
}
通过map生成json
package main
import (
"encoding/json"
"fmt"
)
func main() {
student := make(map[string]interface{})
student["name"] = "5lmh.com"
student["age"] = 18
student["sex"] = "man"
b, err := json.Marshal(student)
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
}
解码json使用json.Unmarshal()函数可以对一组数据进行JSON格式的解码
func Unmarshal(data []byte, v interface{}) error
示例解析到结构体
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Age int `json:"age,string"`
Name string `json:"name"`
Niubility bool `json:"niubility"`
}
func main() {
// 假数据
b := []byte(`{"age":"18","name":"5lmh.com","marry":false}`)
var p Person
err := json.Unmarshal(b, &p)
if err != nil {
fmt.Println(err)
}
fmt.Println(p)
}
示例解析到interface
package main
import (
"encoding/json"
"fmt"
)
func main() {
// int和float64都当float64
b := []byte(`{"age":1.3,"name":"5lmh.com","marry":false}`)
// 声明接口
var i interface{}
err := json.Unmarshal(b, &i)
if err != nil {
fmt.Println(err)
}
// 自动转到map
fmt.Println(i)
// 可以判断类型
m := i.(map[string]interface{})
for k, v := range m {
switch vv := v.(type) {
case float64:
fmt.Println(k, "是float64类型", vv)
case string:
fmt.Println(k, "是string类型", vv)
default:
fmt.Println("其他")
}
}
}