网站建设 北京,企业网站托管方案内容,wordpress图片分组,好的ftp网站Go 标准库中的 encoding/json 包提供了 JSON 数据的编码和解码功能。
在日常开发中#xff0c;我们主要使用的函数有解析字符串类型的 Marshal 和 Unmarshal#xff0c;以及处理流式 JSON 数据的 Encoder 和 Decoder。
一、Marshal 与 Unmarshal
json.Marshal#xff1a;…Go 标准库中的 encoding/json 包提供了 JSON 数据的编码和解码功能。
在日常开发中我们主要使用的函数有解析字符串类型的 Marshal 和 Unmarshal以及处理流式 JSON 数据的 Encoder 和 Decoder。
一、Marshal 与 Unmarshal
json.Marshal转为 JSON 字符串json.Unmarshal转为 Go 数据结构
func Marshal(v interface{}) ([]byte, error)函数接受一个参数 v它可以是任意类型的数据结构包括基本类型、结构体、切片、映射等Marshal() 函数会将这个数据结构转换为对应的 JSON 格式的字节切片并返回结果。实例
type Person struct {Name stringAge int
}func main() {// Marshalp : Person{Name: Alice, Age: 30}bytes, err : json.Marshal(p)if err ! nil {fmt.Println(Error:, err)}fmt.Println(string(bytes)) // 字节 强转 字符串// Unmarshalvar p2 Personerr json.Unmarshal(bytes, p2)if err ! nil {fmt.Println(Error:, err)}fmt.Println(p2)
}二、Encoder 与 Decoder
Encoder 可以将Go语言的数据结构编码为 JSON 并写入到一个io.Writer接口这对于处理大的、可能无法全部装入内存的数据结构或者连续的数据流非常有用。即Encoder可以将数据直接写入到一个文件中而不需要先将整个数据集序列化为一个大的字符串。
Decoder 可以从一个 io.Reader 接口读取 JSON 数据并解码为 Go 语言的数据结构这对于读取大的、可能无法全部装入内存的JSON文档或者连续的数据流非常有用。即Decoder可以从一个文件中读取并解码数据而不需要先将整个文件加载到内存中。
json.NewEncoder创建流式 JSON 编码器json.NewDecoder创建流式 JSON 解码器
type Person struct {Name string
}func main() {// Encoderp : Person{Name: Alice}encoder : json.NewEncoder(os.Stdout)err : encoder.Encode(p)if err ! nil { fmt.Println(Error:, err) }// Decodervar p2 Persondecoder : json.NewDecoder(strings.NewReader({Name:Alice}))err decoder.Decode(p2)if err ! nil { fmt.Println(Error:, err) }fmt.Println(p2)
}// 输出{Name:Alice} {Alice}附加Encoder 与 Decoder 简单应用案例
// Encoder
file, _ : os.Create(output.json)
enc : json.NewEncoder(file)
for _, v : range values {err : enc.Encode(v)if err ! nil {log.Println(err)}
}// Decoder
file, _ : os.Open(input.json)
dec : json.NewDecoder(file)
for {var v Valueif err : dec.Decode(v); err io.EOF {break} else if err ! nil {log.Println(err)}fmt.Println(v)
}