在golang中使用json

jsoniter高性能json库

非常快,支持java和go

marshal使用的一些坑

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Id   int `json:"id,string"` //加了这个序列化到json中int类型会被转换成string类型
    Name string `json:"name"` //加了这个打印出来就是小写的name
    //age int 如果这里是小写的age,则序列化之后print无法打印出来,marshal只可以序列化可以导出的属性
    Age int `json:"age,omitempty"` //加了omitempty之后,如果该值为初始化空值,则不会输出,因为是int所以这里是0
    Address string `json:"-"` //加了中划线的值是绝对被忽略的
}

func main() {
    var json = jsoniter.ConfigCompatibleWithStandardLibrary //使用jsoniter第三方包替换官方json模块提升json模块性能
    u := User{
         Id:   12,
        Name: "Jerry",
        Age:  0,
    }
    data, err := json.Marshal(&u) //data是byte类型
    if err != nil {
        return
    }
    fmt.Println(string(data)) //{"id":"0","name":"Jerry"} //因为Age是0所以被omitempty过滤了,Address被-过滤了
    u2 := &User{}
    json.Unmarshal(data, u2) //反序列化data仍然需要使用byte类型
    fmt.Println(u2) //&User{12 jerry 0} 可以发现Address没有反序列化,被过滤掉的字段无法反序列化到结构体中
}




posted @ 2019-12-19 19:52  离地最远的星  阅读(1140)  评论(0编辑  收藏  举报