golang学习笔记-json的处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/recall_yesterday/article/details/78914124

一:json的编码使用json的Marshal()函数可以对结构中的数据进行json格式的编码。这个函数可以接受任何数据类型并且返回一个[]byte.

这里需要注意的也是我踩过的一个坑就是结构体中的成员的可见性,会影响json的转换,比如

type rspinfo struct {
   Message int
   Result int
}
这个就是正常转化的,因为结构体中的成员都是可以见的。
type rspinfo struct {
   message int
   result int
}
这个就是不行了,因为结构体中的成员是非可见的,所以进行json的转换后会是一个空的。
第二点需要注意的是,如果结构体中有指针,那么在转换的过程中,或自动将指针解引用,将指针的内容做转换。

如果指针是空,会转换成null。


布尔值转化为JSON后还是布尔类型。(引用下书中原话)
 浮点数和整型会被转化为JSON里边的常规数字。
 字符串将以UTF-8编码转化输出为Unicode字符集的字符串,特殊字符比如<将会被转义为
\u003c。
 数组和切片会转化为JSON里边的数组,但[]byte类型的值将会被转化为 Base64 编码后
的字符串,slice类型的零值会被转化为 null。
 结构体会转化为JSON对象,并且只有结构体里边以大写字母开头的可被导出的字段才会
被转化输出,而这些可导出的字段会作为JSON对象的字符串索引。
 转化一个map类型的数据结构时,该数据的类型必须是 map[string]T(T可以是
encoding/json 包支持的任意数据类型)。

二:json的解码对于json的解码使用json.Unmarshal(data []byte,a interface{}) error

值得注意的是第二参数应该传个指针,如果不传指针会怎么样?当然是不会怎么样喽,只是你的结构体没被填充而已。

解码过程中:

 JSON中的布尔值将会转换为Go中的bool类型;
 数值会被转换为Go中的float64类型;
 字符串转换后还是string类型;
 JSON数组会转换为[]interface{}类型;
 JSON对象会转换为map[string]interface{}类型;
 null值会转换为nil。


三:对流式数据的json转化

json包还支持对流式数据的转换

func NewDecoder(r io.Reader) *Decoder
func NewEncoder(w io.Writer) *Encoder

这里不再细说。简单看下使用方法即可

dec := json.NewDecoder(os.Stdin)
enc := json.NewEncoder(os.Stdout)


var v map[string]interface{}

dec.Decode(&v);

enc.Encode(&v)

猜你喜欢

转载自blog.csdn.net/recall_yesterday/article/details/78914124