func Marshal(v interface{}) ([]byte, error)
b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)
var m FamilyMember
err := json.Unmarshal(b, &m)
if err != nil{
panic("反序列化失败")
}
fmt.Printf("%#v\n", m)
const jsonExample = `{"name":{"first":"Tom","last":"Anderson"},"age":37,"children":["Sara","Alex","Jack"],"fav.movie":"Deer Hunter","friends":[{"first":"Dale","last":"Murphy","age":44},{"first":"Roger","last":"Craig","age":68},{"first":"Jane","last":"Murphy","age":47}]}`
// 判断该json是否合法
if !gjson.Valid(jsonExample) {
log.Fatalf("%s", "invalid json")
}
// 获取Json中的age 匹配得到字段
age := gjson.Get(jsonExample, `age`).Int()
fmt.Printf("%T, %+v\n", age, age)
// 获取lastname
lastname := gjson.Get(jsonExample, `name.last`).String()
fmt.Printf("%T, %+v\n", lastname, lastname)
// 获取children数组
for _, v := range gjson.Get(jsonExample, `children`).Array() {
fmt.Printf("%q ", v.String())
}
fmt.Println()
// 获取第二个孩子
fmt.Printf("%q\n", gjson.Get(jsonExample, `children.1`).String())
fmt.Printf("%q\n", gjson.Get(jsonExample, `children|1`).String())
// 通配符获取第三个孩子
fmt.Printf("%q\n", gjson.Get(jsonExample, `child*.2`).String())
// 反转数组函数
fmt.Printf("%q\n", gjson.Get(jsonExample, `children|@reverse`).Array())
// 自定义函数 - 全转大写
gjson.AddModifier("case", func(json, arg string) string {
if arg == "upper" {
return strings.ToUpper(json)
}
return json
})
fmt.Printf("%+v\n", gjson.Get(jsonExample, `children|@case:upper`).Array())
// 直接解析为map
jsonMap := gjson.Parse(jsonExample).Map()
fmt.Printf("%+v\n", jsonMap)
for _, v := range jsonMap {
fmt.Printf("%T, %+v\n", v, v)
}