(三十八)golang--json(对切片、map、结构体进行序列化)
时间:2022-07-23
本文章向大家介绍(三十八)golang--json(对切片、map、结构体进行序列化),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
JSON(javascript object notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。key-val
JSON是在2001年开始推广的数据格式,目前已成为主流的数据格式。
JSON易于机器解析和生成,并有效地提升网络传输效率。通常程序在网络传输时会先将数据(结构体、map)等序列化成json字符串,到接收方得到json数据时,再反序列化恢复成原来的数据类型。这种方式已成为各个语言的标准。
要解析成json格式,struct里面的字段必须大写!!!不然解析出来的是{}
因为Json包相当于一个外包,字段大写才能被其调用。。。
package main
import (
"encoding/json"
"fmt"
)
type monster struct {
Name string
Age int
Birthday string
Sal float64
Skill string
}
func testStruct() {
m := monster{
Name: "牛魔王",
Age: 10,
Birthday: "1994-09-18",
Sal: 10000.0,
Skill: "牛魔拳",
}
//序列化
data, err := json.Marshal(&m)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%vn", string(data))
}
func testMap() {
var a map[string]interface{}
a = make(map[string]interface{})
a["name"] = "孙悟空"
a["age"] = 20
a["address"] = "水帘洞"
a["skill"] = "七十二变"
data, err := json.Marshal(a)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%vn", string(data))
}
func testSlice() {
var slice []map[string]interface{}
var m1 map[string]interface{}
m1 = make(map[string]interface{})
m1["name"] = "孙悟空"
m1["age"] = 20
m1["address"] = "水帘洞"
m1["skill"] = [2]string{"七十二变", "如意金箍棒"}
slice = append(slice, m1)
var m2 map[string]interface{}
m2 = make(map[string]interface{})
m2["name"] = "猪八戒"
m2["age"] = 30
slice = append(slice, m2)
data, err := json.Marshal(slice)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%vn", string(data))
}
func testFloat64() {
var a float64
a = 0.987
data, err := json.Marshal(a)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%vn", string(data))
}
func main() {
testStruct()
testMap()
testSlice()
testFloat64()
}
要想序列化成小写的,只需要用tag指定即可:
对普通数据类型进行序列化是没意义的,只是相当于转换成string类型。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 快速学习-Saturn性能测试报告
- Java源码系列1——ArrayList
- 【Kubernetes】自定义资源CRDs不支持fieldselector
- Cypress系列(48)- and() 命令详解
- Java源码系列2——HashMap
- 快速学习-Saturn Console部署
- MySQL的各种日志
- 本地机器如何访问服务器上的docker容器内的tensorboard?
- MySQL是如何实现可重复读的?
- Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?
- 如何理解被 protected 修饰的成员变量?
- 重学数据结构(五、串)
- python boto和boto3操作bucket
- 对比 Redis 中 RDB 和 AOF 持久化
- Nginx负载均衡健康检查功能