encoding/json
- encoding/json 是Go语言自带的JSON转换库。
1 JSON
- JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
- 它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
- 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2 Marshal
func Marshal(v interface{}) ([]byte, error)
-
把对象
v
转换为JSON编码
。- 布尔型转换为 JSON 后仍是布尔型, 如true -> true;
- 浮点型和整数型转换后为JSON里面的常规数字,如 1.23 -> 1.23;
- 字符串将以UTF-8编码转化输出为Unicode字符集的字符串,特殊字符比如角括号
"<"
和">"
会转义为"\u003c"
和"\u003e"
,"&"
转义为"\u0026"
; - 数组和切片被转换为JSON 里面的数组,[]byte类会被转换为base64编码后的字符串,slice的零值被转换为null;
- 结构体会转化为JSON对象,并且只有结构体里边
以大写字母开头
的可被导出的字段
才会被转化输出,而这些可导出的字段会作为JSON对象的字符串索引; - 转化一个map 类型的数据结构时,该数据的类型必须是 map[string]T(T 可以是encoding/json 包支持的任意数据类型)。
- 参考
-
例子
- 下面这个代码段主要展示了如何将
go
语言里的结构体类型
转换为json类型
。
- 下面这个代码段主要展示了如何将
package test
import (
"encoding/json"
"fmt"
"os"
)
func main() {
// 定义一个结构体
type ColorGroup struct {
ID int
Name string
Colors []string
}
//一个实例
group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{
"Crimson", "Red", "Ruby", "Maroon"},
}
//开始解析这个实例,换句话说,将go的struct转换为json的格式
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
//输出
os.Stdout.Write(b)
}
- 输出结果
{
"ID":1,"Name":"Reds","Colors"