GoLand Json 解析

litesky · · 2014 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

GoLnand 这门语言 比较特殊,靠标志符的大小写来决定访问域,而不是像传统java,c++那样使用关键字限定访问。

看个例子:
这里定义了一个解析结构体

type Response struct {
code int64
msg string
data string
}

执行json解析
func main() {
var resp Response
err:=json.Unmarshal([]byte(` {"code":200,"msg":"success","data":"Macbook Pro 2018 款"}`),&resp)
if err !=nil {
return
}else {
fmt.Println(resp)
}
}


image.png

然而json数据并没有成功解析到变量resp 中 ,为什么会这样呢?

刚刚说到了 GoLand是以字母大小写来限定访问域的 只有首字母大写才可以被导出(可以理解为 public ),子现在我们把 Response 改成这样 ,首字母大写 ,再来看看结果

type Response struct {

Code int64
Msg string
Data string

}


image.png
image.png

json数据成功解析了出来

这里有人可能注意到了 ,sutruct 里面的字段 和 json 字符串中的字段并不一致 。这里就是 GoLang json解析包 自动匹配的结果了(这里的自动匹配 是指不区分大小 ,但是字母还是要一样的),不信我们试试

这里我把字符串对应的字段 改成了这样


image.png

运行 结果
image.png

那json 字段是否可以不合struct 字段匹配呢? 当然也是可以的。

可以通过tag 指定 映射字段。
修改一下结构体:

type Response struct {

Code int64 `json:"status"`
Msg string `json:"message"`
Data string `json:"data"`

}
修改json 数据:


image.png

最后也是可以成功解析的

这里总结一下 sturct 导出字段的书写

  • 1 要解析到struct 内的字段上,该字段必须 首字母大写(即为导出的)(强制)
  • 2 struct 字段标志符 可以与json 数据中的对应字段 匹配即可(可以忽略大小写)(默认)
  • 3 struct 字段标志符 可以通过添加tag 与json数据中的对应字段映射(也就是说可以连单词都不用对应)(可选)
  • 4 GoLand 的中出了Channel, complex, 和函数类型不能 做映射之外,其他都可以(默认)
  • 5 指针类型也可以做映射 如果指针不为null 就会自动转成 相应的类型(默认)
  • 6 inteface{} 对应jsonobject ,[]inteface{} 对应 jsonarray

Json 解析

通过调用 jsonUnmarshal() 方法 ,该方法有两个参数,第一个是要解析的json数据字节切片,第二个是要解析到的变量,该方法 失败 会返回err


image.png

Json 生成

通过调用 json.Marshal方法 ,该方法传入一个参数 ,即inteface{} (你要转换的对象) ,该方法会返回一个字节切片,和err

image.png

结果如下
image.png

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:litesky

查看原文:GoLand Json 解析

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2014 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传