1、什么是JSON?
2、go标准库json包的内容?
3、开发中常用json操作?
一、什么是JSON?
JSON简单的理解就是特殊格式的字符串,被设计用来传输和存储数据,和xml类似,但是在API和前后端分离数据交互更多是使用json,json不仅比XML简单,传输中更节省文本。网站中的ajax、后端api基本上是使用json编码后的数据。
二、go标准库json包的内容?
结构体
1)type InvalidUTF8Error
func (e *InvalidUTF8Error) Error() string
Go1.2之前版本,当试图编码一个包含非法utf-8序列的字符串时会返回错误。Go1.2及之后版本,编码器会强行将非法字节替换为unicode字符U+FFFD来使字符串合法。本错误已不再出现,但出于向后兼容考虑而保留。
2)type InvalidUnmarshalError
func (e *InvalidUnmarshalError) Error
InvalidUnmarshalError用于描述一个传递给解码器的非法参数。(解码器的参数必须是非nil指针)
3)type SyntaxError
func (e *SyntaxError) Error() string
SyntaxError表示一个json语法错误。
4)type UnmarshalFieldError
func (e *UnmarshalFieldError) Error() string
UnmarshalFieldError表示一个json对象的键指向一个非导出字段。(因此不能写入;已不再使用,出于兼容保留)
5)type UnmarshalTypeError
func (e *UnmarshalTypeError) Error() string
UnmarshalTypeError表示一个json值不能转化为特定的go类型的值。
6)type UnsupportedTypeError
func (e *UnsupportedTypeError) Error() string
UnsupportedTypeError表示试图编码一个不支持类型的值。
7)type UnsupportedValueError
func (e *UnsupportedValueError) Error() string
8)type MarshalerError
func (e *MarshalerError) Error() string
9)type Number string
Number类型代表一个json数字字面量
func (n Number) Int64() (int64, error)
将该数字作为int64类型返回
func (n Number) Float64() (float64, error)
将该数字作为float64类型返回
func (n Number) String() string
返回该数字的字面值文本表示
10)type RawMessage []byte
RawMessage类型是一个保持原本编码的json对象。本类型实现了Marshaler和Unmarshaler接口,用于延迟json的解码或预计算json的编码。
func (m *RawMessage) MarshalJSON() ([]byte, error)
MarshalJSON返回 *m 的json编码。
func (m *RawMessage) UnmarshalJSON(data []byte) error
UnmarshalJSON将*m设为data的一个拷贝
代码案例
package main
import (
"encoding/json"
"github.com/lunny/log"
"fmt"
)
func main() {
var raw json.RawMessage
j, err := raw.MarshalJSON()
if err != nil {
log.Println(err)
}
fmt.Println(string(j))
err = raw.UnmarshalJSON([]byte(`{"name":"lai"}`))
if err != nil {
log.Println(err)
}
j, err = raw.MarshalJSON()
if err != nil {
log.Println(err)
}
fmt.Println(string(j))
}
11)type Marshaler interface
实现了Marshaler接口的类型可以将自身序列化为合法的json描述。
12)type Unmarshaler interface
实现了Unmarshaler接口的对象可以将自身的json描述反序列化。该方法可以认为输入是合法的json字符串。如果要在方法返回后保存自身的json数据,必须进行拷贝。
函数
1)func HTMLEscape(dst *bytes.BUffer, src []byte)
HTMLEscape 函数将json编码的src中的<、>、&、U+2028和U+2029字符替换为\u003c、\u003e、\u0026、\u2028、\u2029转义字符串,以便json编码可以安全的嵌入HTML的