golang标准库中的encoding/json包

栏目: Go · 发布时间: 6年前

内容简介: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

1)func NewDecoder(r io.Reader)

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

1)func NewEncoder(w io.Writer)

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web性能权威指南

Web性能权威指南

Ilya Grigorik / 李松峰 / 人民邮电出版社 / 2013-9 / 69

本书是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物。本书目标是涵盖Web 开发者技术体系中应该掌握的所有网络及性能优化知识。全书以性能优化为主线,从TCP、UDP 和TLS 协议讲起,解释了如何针对这几种协议和基础设施来优化应用。然后深入探讨了无线和移动网络的工作机制。最后,揭示了HTTP 协议的底层细节,同时详细介绍了HTTP 2.0、 XHR、SSE、WebSoc......一起来看看 《Web性能权威指南》 这本书的介绍吧!

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具