[golang]标准库-json
前言
json数据格式通常包含两个操作:序列化(把对象转换成JSON数据类型)和反序列化(把JSON数据类型转换成对象),二者操作互逆。
Go语言中相关标准库为encoding/json。
示例代码
package main
import (
"encoding/json"
"fmt"
)
type JsonExample struct {
Name string `json:"name,omitempty"` // 序列化后显示为name,若其值为空,则不显示该字段
Age int `json:"age"` // 序列化后显示为age
School string `json:"university"` // 序列化后显示为university
Class []string `json:"class"`
}
// 对象序列化为json
func JsonMarshal() {
var jex JsonExample = JsonExample{
Name: "Go",
Age: 12,
School: "TsingHua",
Class: []string{"YuWen", "ShuXue", "YingYu"},
}
by, _ := json.Marshal(jex)
fmt.Println(string(by))
}
// json反序列化为对象
func JsonUnmarshal() {
var v JsonExample
by := []byte(`{"name": "python","age":18,"university": "ustc","class": ["WuLi","HuaXue","ShengWu"]}`)
json.Unmarshal(by, &v)
fmt.Printf("%+v\n", v)
}
func main() {
JsonMarshal() // {"name":"Go","age":12,"university":"TsingHua","class":["YuWen","ShuXue","YingYu"]}
fmt.Println("=============")
JsonUnmarshal() // {Name:python Age:18 School:ustc Class:[WuLi HuaXue ShengWu]}
}
注意事项:
- 如果知道反序列化之后的具体结构,那么应该先定义一个符合反序列之后的结构体。
- 如果不知道反序列化之后的具体结构,那么应该使用
interface来表示任意类型。 - 结构体定义时的标签用于指定序列化之后的显示。
参考文档
- 谢伟《Go语言项目开发上手指南》机械工业出版社
- 官方json包文档
[golang]标准库-json的更多相关文章
- golang 标准库间依赖的可视化展示
简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内 ...
- Golang 标准库log的实现
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gotaly.blog.51cto.com/8861157/1406905 前 ...
- golang标准库分析之net/rpc
net/rpc是golang提供的一个实现rpc的标准库.
- Golang 标准库提供的Log(一)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gotaly.blog.51cto.com/8861157/1405754 G ...
- golang 标准库
前言 不做文字搬运工,多做思路整理 就是为了能速览标准库,只整理我自己看过的...... 最好能看看英文的 标准库 fmt strconv string 跳转 golang知识库总结
- pyhton标准库 json
使用loads方法即可将json字符串转换成python对象,对应关系如下: #JSON Python object dict array list string unicode number (in ...
- [python]标准库json格式化工具
这段时间做的事情比较杂乱,一部分时间在做运维,一部分时间在做开发,总是太着急,总是感觉很多东西做的不是很满意.还是要静下心来好好想一想,多花些时间来改进,重构和思考. 软件开发绝不紧紧是写代码,完成功 ...
- golang标准库 context的使用
本文索引 问题引入 context包简介 示例 问题引入 goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇. goroutine的简单固然有利于我们的开发,但 ...
- Golang标准库——io-接口
接口 Read相关 Reader Reader接口用于包装基本的读取方法. type Reader interface { //将数据读入到p中,直到读满p或者读取的过程中遇到错误,此时返回的n< ...
- Golang标准库——io-结构
结构 LimitedReader 定义 限制从Reader中读取的字节数. type LimitedReader struct { R Reader // underlying reader N in ...
随机推荐
- 2022-06-14:数组的最大与和。 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共有 numSlots 个篮子,编号为 1
2022-06-14:数组的最大与和. 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n .总共有 numSlots 个篮子,编号 ...
- 2022-03-25:给定一个长度为 N 的字符串 S,由字符‘a‘和‘b‘组成,空隙由 ‘?‘ 表示。 你的任务是用a字符或b字符替换每个间隙, 替换完成后想让连续出现同一种字符的最长子串尽可能短。
2022-03-25:给定一个长度为 N 的字符串 S,由字符'a'和'b'组成,空隙由 '?' 表示. 你的任务是用a字符或b字符替换每个间隙, 替换完成后想让连续出现同一种字符的最长子串尽可能短. ...
- jmeter跨线程组引用变量的3种方法
利用BeanShell后置处理程序将参数设置为全局变量,用于跨线程传参(注:1.把提取变量的线程组放到引用变量的线程组前2.在测试计划中勾选"独立运行每个线程组") 方法1(jme ...
- js 之二 事件对象
事件对象 /当事件的响应函数被触发时,浏览器每次都会讲一个事件对象作为实参传递响应函数; 在事件对象中封装了当前事件相关的一切信息,比如:鼠标的,键盘的操作 // 当鼠标在areaDiv中移动时,在s ...
- 顶级生物信息学 RSS 订阅源
早在 2018 年的时候我在"生信草堂"的公众号上写过一篇关于 RSS 的文章<使用 RSS 打造你的科研资讯头条>,介绍了关于 RSS 的一些内容和如何使用 inor ...
- Kali安装GVM
1.安装gvm ┌──(rootkali)-[/home/kali] └─# gvm-setup 1 ⨯ [>] Starting PostgreSQL service [-] ERROR: T ...
- C# 客户端程序 Visual Studio 远程调试方法
传统桌面客户端的远程调试相比UWP,ASP等项目来说,配置比较麻烦,因为它是非部署的应用程序,原理是复制编译的文件到远程计算机,通过网络来连接和VS的通信,本文主要讲述WPF,WinForm应用程序的 ...
- 解决log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory). log4j:WARN Please initialize the log4j system properly.警告
1. 问题分析 使用log4j时不起作用,因为找不到配置文件log4j.properties,存在的问题可能是没有配置log4j.properties文件,也可能是配置文件log4j.properti ...
- 三分钟快速了解什么是MES系统
大家好,我是Edison. 近日我打算系统学习和整理一下MES/MOM系统相关的领域知识,从而构建我的业务域知识背景.万丈高楼平地起,我们先从快速了解什么是MES系统开始吧! 作为IT技术从业者,特别 ...
- 高精度减法(模板yxc)
#include <bits/stdc++.h> using namespace std; bool cmp(vector<int> &A, vector<int ...