结构体序列化
package main
import (
"encoding/json"
"fmt"
)
type Cat struct {
// 后面``中的内容是给字段加个别名,在json序列化时会序列化为后面的别名
Name string `json:"name"`
Age int `json:"age"`
Color string `json:"color"`
}
func main() {
c := Cat{
Name:"加菲",
Age:10,
Color: "yellow",
}
// 这里如果不使用指针,调用会将结构体copy一份
cjson, err := json.Marshal(&c)
if err == nil{
fmt.Println(string(cjson))
}
}
结果
{"name":"加菲","age":10,"color":"yellow"}
json 转 结构体
package main
import (
"encoding/json"
"fmt"
)
type Cat struct {
// 后面``中的内容是给字段加个别名,在json序列化时会序列化为后面的别名
Name string `json:"name"`
Age int `json:"age"`
Color string `json:"color"`
}
func main() {
jsonStr := "{\"name\":\"加菲\",\"age\":10,\"color\":\"yellow\"}"
var c Cat
err := json.Unmarshal([]byte(jsonStr), &c)
if err == nil {
fmt.Printf("名字=%v, 年龄=%v, 颜色=%v", c.Name, c.Age, c.Color)
}
}
结果如下
名字=加菲, 年龄=10, 颜色=yellow
map转json
package main
import (
"encoding/json"
"fmt"
)
func main() {
m := make(map[string]interface{})
m["name"] = "小黑"
m["age"] = 3
m["color"] = "black"
mjson, err := json.Marshal(m)
if err == nil {
fmt.Println(string(mjson))
}
}
输出结果
{"age":3,"color":"black","name":"小黑"}
切片转json
package main
import (
"encoding/json"
"fmt"
)
func main() {
s := make([]map[string]interface{}, 2)
m1 := make(map[string]interface{})
m1["name"] = "小黑"
m1["age"] = 3
m1["color"] = "black"
m2 := make(map[string]interface{})
m2["name"] = "加菲"
m2["age"] = 10
m2["color"] = "yellow"
s[0] = m1
s[1] = m2
sjson, err := json.Marshal(s)
if err == nil {
fmt.Println(string(sjson))
}
}
输出结果
[{"age":3,"color":"black","name":"小黑"},{"age":10,"color":"yellow","name":"加菲"}]