内容简介:1、什么是JSON?2、go标准库json包的内容?3、开发中常用json操作?
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的<script>标签里。因为历史原因,网络浏览器不支持<script>标签中使用标准HTML转义,因此必须使用另一种json编码方案。
代码案例
package main import ( "encoding/json" "bytes" "fmt" ) func main() { src := []byte(`{"name":"<lai>"}`) buffer := bytes.NewBuffer(nil) json.HTMLEscape(buffer, src) fmt.Println(buffer.String()) } // 输出:{"name":"\u003clai\u003e"}
2)func Indent(dst *Bytes.Buffer, src []byte, prefix, indent string)
Indent函数将json编码的调整缩进之后写入dst。每一个json元素/数组都另起一行开始,以prefix为起始,一或多个indent缩进(数目看)
代码案例
package main import ( "encoding/json" "log" "fmt" "bytes" "os" ) type Student struct { Name string Age int } func main() { ss := []Student{ {"lai",12}, {"ada",15}} b, err := json.Marshal(ss) if err != nil { log.Fatalln(err) } fmt.Println(string(b)) var out bytes.Buffer json.Indent(&out, b, "", "\t") out.WriteTo(os.Stdout) fmt.Println(string(b)) }
3)func Marshal(v interface{}) ([]byte, error)
递归进行json编码
4)func MarshalIndent(v interface{}, prefix, index string) ([]byte, error)
Marshallndent类似Marshal但会使用缩进将输出格式化。
5)func Unmarshal(data []byte, v interface{}) error
json解码
type Decoder struct
Decoder
Decoder,解码器有自己的缓冲,并可能超前读取部分json数据。2)func (dec *Decoder) UseNumber()
UseNumber方法将dec设置为当接收端是Interface{}接口时将json数字解码为Number类型而不是float64类型。
3)func (dec *Decoder) Decode(v interface{}) error
Decode从输入流读取下一个json编码值并保持在v指向的值里。
type Encoder struct
Encoder
Encoder。2)func (enc *Encoder) Encode(v interface{}) error
Encode将v的json编码写入输出流,并会写入一个换行符。
三、开发中常用json操作
编码:
1)func Marshal(v interface{}) ([]byte, error)
解码:
2)func UnMarshal(data []byte, v interface{}) error
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 中兴通讯助力DevOps标准发布,喜获标准工作组成员授牌
- CODING 受邀参与 DevOps 标准体系之系统和工具 & 技术运营标准技术专家研讨会
- 中国电子技术标准化研究院雷虎:以标准为依托,构建区块链测试生态
- 倚博科技成为 DevOps/AIOps 标准工作组成员,助力国家DevOps/AIOps标准体系建设与落地
- C# 标准性能测试
- Python标准库一览
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web性能权威指南
Ilya Grigorik / 李松峰 / 人民邮电出版社 / 2013-9 / 69
本书是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物。本书目标是涵盖Web 开发者技术体系中应该掌握的所有网络及性能优化知识。全书以性能优化为主线,从TCP、UDP 和TLS 协议讲起,解释了如何针对这几种协议和基础设施来优化应用。然后深入探讨了无线和移动网络的工作机制。最后,揭示了HTTP 协议的底层细节,同时详细介绍了HTTP 2.0、 XHR、SSE、WebSoc......一起来看看 《Web性能权威指南》 这本书的介绍吧!