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: ,
Birthday: "1994-09-18",
Sal: 10000.0,
Skill: "牛魔拳",
}
//序列化
data, err := json.Marshal(&m)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
} func testMap() {
var a map[string]interface{}
a = make(map[string]interface{})
a["name"] = "孙悟空"
a["age"] =
a["address"] = "水帘洞"
a["skill"] = "七十二变"
data, err := json.Marshal(a)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
} func testSlice() {
var slice []map[string]interface{}
var m1 map[string]interface{} m1 = make(map[string]interface{})
m1["name"] = "孙悟空"
m1["age"] =
m1["address"] = "水帘洞"
m1["skill"] = []string{"七十二变", "如意金箍棒"}
slice = append(slice, m1)
var m2 map[string]interface{} m2 = make(map[string]interface{})
m2["name"] = "猪八戒"
m2["age"] =
slice = append(slice, m2)
data, err := json.Marshal(slice)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
} func testFloat64() {
var a float64
a = 0.987
data, err := json.Marshal(a)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
} func main() {
testStruct()
testMap()
testSlice()
testFloat64()
}

要想序列化成小写的,只需要用tag指定即可:

 

对普通数据类型进行序列化是没意义的,只是相当于转换成string类型。

(三十八)golang--json(对切片、map、结构体进行序列化)的更多相关文章

  1. Golang Json文件解析为结构体工具-json2go

    代码地址如下:http://www.demodashi.com/demo/14946.html 概述 json2go是一个基于Golang开发的轻量json文件解析.转换命令行工具,目前支持转换输出到 ...

  2. NeHe OpenGL教程 第三十八课:资源文件

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. Java进阶(三十八)快速排序

    Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...

  4. SQL注入之Sqli-labs系列第三十八关、第三十九关,第四十关(堆叠注入)

    0x1 堆叠注入讲解 (1)前言 国内有的称为堆查询注入,也有称之为堆叠注入.个人认为称之为堆叠注入更为准确.堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据 ...

  5. 微信小程序把玩(三十八)获取设备信息 API

    原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx. ...

  6. 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

    1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...

  7. Golang面向对象编程-struct(结构体)

    Golang面向对象编程-struct(结构体) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是面向对象编程 面向对象编程(Object Oriented Program ...

  8. Golang通过反射拼接一个结构体所有字段

    golang通过反射拼接一个结构体所有字段 需求 将一个结构体所有字段以"|"连接拼接成字符串 golang 不同类型拼接成string使用Sprintf比较麻烦,如果一个结构体有 ...

  9. bp(net core)+easyui+efcore实现仓储管理系统——入库管理之二(三十八)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. Cassandra官方介绍及安装

    Cassandra官方介绍及安装 这个数据库有很高的伸缩性和可用性,你完全不需要向性能妥协.在硬件或者云设施上做修改 官网:Cassandra官网 一.简介 cassandra这个数据库有很高的伸缩性 ...

  2. webpack4+koa2+vue 实现服务器端渲染(详解)

    _ 阅读目录 一:什么是服务器端渲染?什么是客户端渲染?他们的优缺点? 二:了解 vue-server-renderer 的作用及基本语法. 三:与服务器集成 四:服务器渲染搭建 4.1 为每个请求创 ...

  3. The usage of Markdown---杂谈:缩进/换行/分割线/注释/文字颜色

    目录 1. 序言 2. 缩进 3. 换行 4. 分割线 5. 注释 6. 改变文字大小和颜色 更新时间:2019.09.14 1. 序言   今天一口气更新了接近10篇博客(虽然只是将我之前基本码好的 ...

  4. Mysql数据库(五)表记录的检索

    一.基本查询语句 二.单表查询 1.查询所有字段 mysql> SELECT * FROM tb_bookinfo; +----------+-----------+--------+----- ...

  5. 数据结构(三十二)图的遍历(DFS、BFS)

    图的遍历和树的遍历类似.图的遍历是指从图中的某个顶点出发,对图中的所有顶点访问且仅访问一次的过程.通常有两种遍历次序方案:深度优先遍历和广度优先遍历. 一.深度优先遍历 深度优先遍历(Depth_Fi ...

  6. django-URL之从URL中获取关键字(七)

    主要用于查询操作. 主要目录 book/views.py from django.http import HttpResponse from django.shortcuts import rende ...

  7. nginx基于uwsgi部署Django

    1.安装nginx yum install -y nginx(需要epel源) 2.安装uwsgi yum groupinstall "Development tools" yum ...

  8. Redis的使用--基本数据类型的操作命令和应用场景

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...

  9. js 面试题解析(一)

    1.call和apply的区别. 当需要传的参数是一个数组时,使用apply更加方便;而使用call时需要将数组展开,将数组中的每一项单独传入. 当需要传入的参数大于3个时,call的性能要略优于ap ...

  10. MySQL8.0 redo日志系统优化

    背景 现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复.redo日志是物理日志,一般采用WAL(Write-Ahead-Loggin ...