Go 语言编程 — encoding/json 库

举报
云物互联 发表于 2021/08/06 00:02:19 2021/08/06
【摘要】 目录 文章目录 目录encoding/json使用 json.Marshal() 函数对一组数据进行 JSON 格式的编码使用 json.Unmarshal() 函数对 JSON 数据进行解码 encoding/json Golang 提供了的标准库 encoding/json 对 JSON 数据进行编解码,并且允许使用 map[string]in...

目录

encoding/json

Golang 提供了的标准库 encoding/json 对 JSON 数据进行编解码,并且允许使用 map[string]interface{}[]interface{} 类型的值来分别存放未知结构的 JSON 对象或数组。

使用 json.Marshal() 函数对一组数据进行 JSON 格式的编码

func Marshal(v interface{}) ([]byte, error)

  
 
  • 1

示例:

type Book struct { Title string Authors []string Publisher string IsPublished bool Price float
}


gobook := Book{ "Go 语言编程", ["XuShiwei", "HughLv", "Pandaman", "GuaguaSong", "HanTuo", "BertYuan", "XuDaoli"], "xxx.com.cn", true, 9.99
}


b, err := json.Marshal(gobook)


b == []byte(`{ "Title": "Go语言编程", "Authors": ["XuShiwei", "HughLv", "Pandaman", "GuaguaSong", "HanTuo", "BertYuan", "XuDaoli"], "Publisher": "xxx.com.cn", "IsPublished": true, "Price": 9.99
}`)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

编码时的数据类型映射如下:

  • 布尔值:转化为 JSON 后还是布尔类型。
  • 浮点数和整型:转化为 JSON 里边的常规数字。
  • 字符串:以 UTF-8 编码转化输出为 Unicode 字符集的字符串,特殊字符比如 “<” 将会被转义为 \u003c。
  • 数组和切片:转化为 JSON 里边的数组,但 []byte 类型的值将会被转化为 Base64 编码后的字符串,Slice 类型的零值会被转化为 null。
  • 结构体:转化为 JSON 对象,并且只有结构体里边以大写字母开头的可被导出的字段才会被转化输出,而这些可导出的字段会作为 JSON 对象的字符串索引。

注意,转化一个 Map 类型的数据结构时,该数据的类型必须是 map[string]T(T 可以是 encoding/json 包支持的任意数据类型)。

使用 json.Unmarshal() 函数对 JSON 数据进行解码

func Unmarshal(data []byte, v interface{}) error

  
 
  • 1

解码时的数据类型映射

  • JSON 中的布尔值:转换为 Go 中的 Bool 类型。
  • JSON 中的数值:转换为 Go 中的 Float64 类型。
  • JSON 中的字符串:转换为 Go 中的 String 类型。
  • JSON 中的数组:转换为 Go 中的 []interface{} 类型。
  • JSON 中的对象(Object):转换为 Go 中的 map[string]interface{} 类型。
  • JSON 中的 null 值:转换为 Go 中的 nil。

文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。

原文链接:is-cloud.blog.csdn.net/article/details/108293351

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。