Golang 的json处理
来源:互联网 发布:linux查看用户组 编辑:程序博客网 时间:2024/05/28 20:19
Golang官网上有专门的包来处理json数据,https://golang.org/pkg/encoding/json/。
需要导入一个包"encoding/json"
import "encoding/json"
和其他语言处理类似,分为encode和decode两部分
encode
类似于php json_encode
的函数在这里为Marshal
函数
func Marshal(v interface{}) ([]byte, error)
php的函数json_encode
是如果encode成功,返回一个string字符串,失败返回一个false
。
Golang和php类似,只不过是encode(这里叫 marshal)成功返回一个[]byte
,失败返回一个error
。
下面看具体的使用方法:
一个给定的结构体Message
type Message struct { Name string Body string Time int64 }
一个Message
的实例
m := Message{"Alice", "Hello", 1294706395881547000}
使用Marshal
函数
b, err := json.Marshal(m)
如果成功了,将会返回一个包含json数据的[]byte
b ==[]byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`)
json 解析相关的 struct tag
还是以Message
struct为例
type Message struct { Name string Body string Time int64 }
正常情况下,我Message
类型的数据被encode后生成的json字符串为:
{ Name: "Alice", Body: "Hello", Time: 1294706395881547000,}
假如我想让Name
换成小写name
,或者其他的字段,例如username
,我就可以加上struct tag:(以username
为例)
type Message struct { Name string `json:"username"` Body string Time int64 }
这样,Marshal后得到的[]byte
强制转化成string
后就会显示为:
{ username: "Alice", Body: "Hello", Time: 1294706395881547000,}
decode
类似于php json_decode
的函数在这里为Unmarshal
函数
func Unmarshal(data []byte, v interface{}) error
php的json_decode
函数接受一个字符串,返回一个变量(或者是object或者是array),如果返回一个null
则证明不可以decode。
Golang则不同,接收一个[]byte
类型的数据,赋值到另外一个参数v
上,如果不能decode,则返回一个error
下面使用的时候可以照抄:
var m Message
b
为上面encode例子中的[]byte
类型的变量,
err := json.Unmarshal(b, &m)
然后m
的值为:
m = Message{ Name: "Alice", Body: "Hello", Time: 1294706395881547000,}
不知要解析的[]byte
为何种结构体的情况如何处理
有时候,我们不知道Unmarshal
的比特数组为何种结构,这种情况下该如何取值呢?
其实也很简单,我们可以定义一个map
var m map[string]interface{}
然后执行Unmarshal
err := json.Unmarshal(b, &m)
这样就可以得到一个包含所有字段的map
了
然后对map
中的值做类型判定,得出数值
if str,ok := m["Name"].(string); ok{ name = str}
- golang的JSON处理
- Golang 的json处理
- golang 处理Json 数组
- golang json 处理
- golang json处理
- golang进阶(五)——restful开发的json处理
- golang的json操作
- golang的json操作
- golang JSON的使用
- Golang的并发处理
- golang的错误处理
- Golang 时间的处理
- golang json处理struct未导出成员
- golang中json的使用
- Golang中一个不错的处理 JSON 的库 go-dproxy
- Golang Json
- golang json
- golang的json的时间格式化解决方案
- 1021: 数字母
- POJ1008简单模拟
- 转发跟重定向的区别
- HDU5974 Simple Math Problem
- 数据库中存储的是什么?数据库存取的是地址
- Golang 的json处理
- Hibernate 一级缓存和二级缓存
- 捡框架的小男孩--Spring(四)
- ruby入门
- 考研分享
- 开通了CSDN个人博客,开心
- Linux下安装jdk
- JavaWeb知识点总结
- tf.transpose