转换
基础转换 | Marshal + MarshalIndent
package main
import (
"encoding/json"
"fmt"
)
func main() {
d := map[string][]string{
"name": {"亚索"},
"skill": {"浪客之道", "斩钢闪", "风之障壁", "踏前斩", "狂风绝息斩"},
}
if data, err := json.Marshal(d); err == nil {
fmt.Printf("%s\n",data)
}
if data, err := json.MarshalIndent(d,""," "); err == nil {
fmt.Printf("%s\n",data)
}
}
结构体转换 | 注意私有和公有
package main
import (
"encoding/json"
"fmt"
)
type Hero struct {
Name string `json:"_name"`
Age int `json:"_age"`
Mainskill string `json:"_mainSkill"`
addr string `json:"_addr"`
}
func main() {
Yasuo := Hero{"亚索", 20, "狂风绝息斩", "艾欧尼亚"}
fmt.Println(Yasuo)
info, err:= json.Marshal(Yasuo)
if err!=nil{
fmt.Println("出现错误!")
}
fmt.Println(string(info))
}
处理匿名字段 | 继承问题
package main
import (
"encoding/json"
"fmt"
)
type User struct{
IkunLevel
Name string
}
type IkunLevel struct{
Sing int
Rap int
Dance int
}
func main() {
xiaoHeiZi:=User{
IkunLevel{1,2,3},"小黑子",
}
fmt.Println(xiaoHeiZi)
if data,err:=json.Marshal(xiaoHeiZi);err==nil{
fmt.Printf("%s \n",data)
}
}
补充
Marshal()函数只有在转换成功的时候才会返回数据,在转换的过程中需要注意。
JSON对象只支持string作为key,所以要编码一个map,必须是map[string]T这种类型(T是Go语言中的任意类型)。
channel、complex和function是不能被编码成JSON的。
- 指针在编码的时候会输出指针指向的内容,而空指针会输出
null。
解析
直接解析
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := `[{"Sing":"1","Rap":"2","Dance":"3","Name":"小黑子"}]`
var dbgInfos []map[string]string
json.Unmarshal([]byte(data), &dbgInfos)
fmt.Println(dbgInfos)
}
结构体解析
package main
import (
"encoding/json"
"fmt"
)
type IkunLevel struct {
Sing int
Rap int
Dance int
}
func main() {
info := `[{"Sing":1,"Rap":2,"Dance":3},` + `{"Sing":2,"Rap":2,"Dance":3}]`
var ikun []IkunLevel
json.Unmarshal([]byte(info), &ikun)
fmt.Println(ikun)
}
结构体嵌套 | 匿名字段解析
package main
import (
"encoding/json"
"fmt"
)
type User struct {
IkunLevel
Name string
}
type IkunLevel struct {
Sing int
Rap int
Dance int
}
func main() {
info := `{"Sing":1,"Rap":2,"Dance":3,"Name":"小黑子"}`
var xiaoHeiZi User
json.Unmarshal([]byte(info), &xiaoHeiZi)
fmt.Println(xiaoHeiZi)
}
附录 | 参考 | 好文
- 千锋教育go开发图书(微信读书)
- go语言官方json库