在处理网络编程时, json格式的数据方便在网络上传输, 兼具可视化和效率... 虽然效率没有那么高... 但是确实使用的很广泛呀. 这个包用于处理golang的json相关的东西.
这个包在处理json问题时, 会用到反射获取字段的tag. 可以参考反射包...
golang的官方文档~
https://blog.golang.org/json-and-go
package main
import (
"fmt"
// "reflect"
"encoding/json"
)
type User struct{
// Name string `json:"-,"` // 这个导出才是 {"-":"张三","age":20}
// Name string `json:"-"` // always omitted
// Name string `json:",omitempty"` // 如果为零值导出为空. 然而不想重命名.
Name string `json:"name,omitempty"` // 如果为零值导出为空.
// Age int `json:"age,string"` // 这个会把int变成json string...
// 上面那个很有用. 在 A map => string => B map 的时候可能会被弄成科学计数法..
// 用字符串表示时间戳这种可以避免这个...
Age int `json:"age"`
sex int `json:"sex"`
}
func main() {
u := User{"张三", 20, 1}
uu, _ := json.Marshal(u)
// 只会导出公有的, 即首字母大写的
fmt.Println(string(uu))
}
// 对于结构体的encode
// A field represents a single field found in a struct.
type field struct {
name string // tag里的json的key
nameBytes []byte // []byte(name)
equalFold func(s, t []byte) bool // bytes.EqualFold or equivalent 比较函数, 折叠的也算在里面了 .
tag bool // 是否有tag.
index []int // --
typ reflect.Type // -- 对应字段的类型
omitEmpty bool // -- 对应 omitempty选项
quoted bool // -- 对应 string 选项
}
对外的方法
func Marshal(v interface{}) ([]byte, error) // json编码
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) // json编码带缩进
func Unmarshal(data []byte, v interface{}) error // json解码
type Number string // JSON number literal. 主要是对付科学计数法? https://stackoverflow.com/questions/22343083/json-marshaling-with-long-numbers-in-golang-gives-floating-point-number
func HTMLEscape(dst *bytes.Buffer, src []byte) //html的变换
还有就是 jsonSteam 的包 用于 json steam.
有疑问加站长微信联系(非本文作者)