文档章节

Go语言结构体转json的坑

o
 osc_a22drz29
发布于 2019/03/22 14:23
字数 334
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

Go语言结构体转json的坑

标签(空格分隔): go

json.Marshal()

JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出,所以必须通过struct tag定义来实现。

针对JSON的输出,我们在定义struct tag的时候需要注意的几点是:

 - 字段的tag是"-",那么这个字段不会输出到JSON
 - tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中
 - tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中
 - 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串

代码示例

package main

import (
	"encoding/json"
	"fmt"
)

func main() {

type UserInfo struct {
	Id int
	Name string
	Address string
}

type Comiket struct {
	id int
	title string
}

type Test struct {
	Id int `json:"-"`
	Content string `json:"content"`
	IsDel bool `json:",string"`
	Type int `json:"type, omitempty"`
}

c := Comiket{1, "AS动漫游戏嘉年华"}
v, error := json.Marshal(c)
fmt.Println(string(v))
fmt.Println(error)
fmt.Println("------------------")

User := UserInfo{1, "taylor", "USA"}
b, err := json.Marshal(User)
fmt.Println(string(b))
fmt.Println(err)
fmt.Println("------------------")

t := Test{Id:1, Content:"hello world", IsDel:true}
val, _ := json.Marshal(t)
fmt.Println(string(val))

}

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Go语言JSON数据相互转换

[TOC] 结构体转json 结构体转json示例: 输出结果: map转json map转json示例: 输出结果: int转json int转json 输出结果: slice转json slice转json 输出结果: json反序列化为结构体 json转结构...

osc_arhijur3
2019/04/01
1
0
小猿圈go语言之使用第三方包操作示例

对于go语言你了解多少,以前有过这方面知识的积累吗?小猿圈go语言讲师就给你分享发一些go语言的知识点,毕竟go会是以后的发展方向,这篇文章说一下go语言使用第三方包操作实例。 go语言使用...

小猿圈加加
2019/07/25
8
0
Go 结构体和map等数据结构转json字符串

Go语言中使用json包中的 Marshal() 函数将数据结构转成json字符串,源代码: func Marshal(v interface{}) ([]byte, error) {e := newEncodeState() err := e.marshal(v, encOpts{escapeHTM......

osc_pw27dksr
2019/04/09
2
0
Protocol Buffers 在前端项目中的使用

前言: 公司后端使用的是go语言,想尝试用pb和前端进行交互,于是便有了这一次尝试,共计花了一星期时间,网上能查到的文档几乎都看了一遍,但大多都是教在node环境下如何使用,普通的js环境...

osc_8ouyb53z
2018/07/19
3
0
json、slice、map、struct 之间的相互转化

interface{}读取非常不方便,将其转换成map类型后就可以读取了 #res是个interface{} res.(map[string]interface{}) 1. golang 中 json 转 struct   <1. 使用 json.Unmarshal 时,结构体的每...

mickelfeng
2018/03/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux下java环境搭建

1、jdk下载: 官方地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 如下图所示,我这边选择的是红框中的版本 2、压缩包上传至服务器 将下载的压缩包上传...

wc_飞豆
41分钟前
17
0
面试题:Java对象不再使用时,为什么要赋值为null?

前言 许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回...

码农突围
43分钟前
22
0
设计模式(5) 原型模式

原型模式 原型模式的适用场景 浅拷贝 深拷贝 用Initialize方法修改初始化状态 原型模式与之前学习的各种工厂方法、单例模式、建造者模式最大、最直观的区别在于,它是从一个既有的对象“克隆...

zhixin9001
43分钟前
7
0
获取免费的pycharm激活码网站

http://www.lookdiv.com/

云烟成雨forever
43分钟前
27
0
用Helm部署Kubernetes应用,支持多环境部署与版本回滚

1 前言 Helm是优秀的基于Kubernetes的包管理器。利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离。现在让我们安...

南瓜慢说
44分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部