一、示例

package main

import (
"encoding/json"
"fmt"
) type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Salary float64 `json:"salary"`
} type Student struct {
Name string `json:"name"`
Age int `json:"age"`
Salary float64 `json:"salary"`
} // 对数据进行序列化
func marshalData(data interface{}) []byte{
data, err := json.Marshal(data)
if err != nil {
fmt.Printf("序列化失败:%s\n", err)
}
fmt.Printf("序列化结果:%v\n", data)
fmt.Printf("序列化结果:%s\n", data)
return data.([]byte)
} // 对 struct 进行序列化
func marshalStruct() []byte {
person := Person{
Name: "佩奇",
Age: 18,
Salary: 99.99,
}
fmt.Printf("原始的数据:%v\n", person)
return marshalData(person)
} // 对 map 进行序列化
func marshalMap() []byte {
var m map[string]interface{}
m = make(map[string]interface{})
m["name"] = "盲僧"
m["age"] = 10
m["hobby"] = [2]string{"篮球", "游泳"}
fmt.Printf("原始的数据:%v\n", m)
return marshalData(m)
} // 对 map 切片进行序列化
func marshalSlice() []byte {
var slice []map[string]interface{}
m1 := map[string]interface{}{
"name": "妖姬",
"age": 20,
}
slice = append(slice, m1)
m2 := map[string]interface{}{
"name": "德玛",
"age": 30,
}
slice = append(slice, m2)
fmt.Printf("原始的数据:%v\n", slice)
return marshalData(slice)
} // 反序列化成 struct
func unmarshalStruct(data []byte) {
// 定义一个 Student 实例
var student Student
err := json.Unmarshal([]byte(data), &student)
if err != nil {
fmt.Println(err)
}
fmt.Println("反序列化结果:", student)
} // 反序列化成 map
func unmarshalMap(data []byte) {
// 定义一个 map
var m map[string]interface{}
// 注意:反序列化 map,不需要 make,因为 make 操作被封装到了 Unmarsha 函数中
err := json.Unmarshal([]byte(data), &m)
if err != nil {
fmt.Println(err)
}
fmt.Println("反序列化结果:", m)
} // 反序列化成 slice
func unmarshalSlice(data []byte) {
// 定义一个 silce
var slice []map[string]interface{}
// 注意:反序列化 slice,不需要 make,因为 make 操作被封装到了 Unmarsha 函数中
err := json.Unmarshal([]byte(data), &slice)
if err != nil {
fmt.Println(err)
}
fmt.Println("反序列化结果:", slice)
} func main() {
// 序列化
result1 := marshalStruct()
fmt.Println()
result2 := marshalMap()
fmt.Println()
result3 := marshalSlice()
fmt.Println()
// 反序列化
unmarshalStruct(result1)
unmarshalMap(result2)
unmarshalSlice(result3)
}

二、注意!!!

在反序列化一个 json 字符串时,要确保反序列化后的数据类型和序列化之前的数据类型一致。

Go:json(序列化、反序列化)的更多相关文章

  1. json序列化 & 反序列化

    json序列化: json的dumps方法可以将json格式数据序列为python的相关数据类型,比如str,常用于打印,另外,在序列化时,中文汉字被转换为unicode编码,在dumps函数中添加参 ...

  2. json序列化反序列化Jackson相关注解

    1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...

  3. C语言JSON序列化/反序列化

    最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...

  4. nodejs - json序列化&反序列化示例

    // demo-json.js var obj = { "name": "LiLi", "age": 22, "sex" ...

  5. spring cloud jackson 枚举json互转 枚举json序列化/反序列化

    先定义一个枚举基类 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(using = ...

  6. Newtonsoft.Json 序列化反序列化

    public class People { public string name { get; set; } public string age { get; set; } public string ...

  7. 怎样在ASP.NET(C#) 使用Json序列化反序列化问题?

    using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serializat ...

  8. JSON序列化反序列化

    JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在 ...

  9. ASP.NET(C#) Json序列化反序列化帮助类Jsonhelper

    原文地址:https://ken.io/note/csharp-asp.net-jsonhelper using System; using System.Collections.Generic; u ...

  10. 关于spring中请求返回值的json序列化/反序列化问题

    https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑

随机推荐

  1. Linux下的录屏软件Kazam

    发现Ubuntu下一个很好用的录屏软件kazam,Ubuntu官方源中就有. 1.安装 $ sudo apt-get install kazam 2.使用 使用很简单,除了截图,还可以录制屏幕视频.既 ...

  2. hdu1102 Constructing Roads 基础最小生成树

    //克鲁斯卡尔(最小生成树) #include<cstdio> #include<iostream> #include<algorithm> using names ...

  3. MVC 感触

    这几天接触了下 ef+ MVC+WEBAPI +bootstrop VIEW--->Controller  -->WebAPI  ---Model (Linq) 记住 VIEW里的 csh ...

  4. OLE/COM Object Viewer

    OLE/COM Object Viewer摘AutoIt Help The "OLE/COM Object Viewer" is a very handy tool to get ...

  5. vue文件中style标签的几个标识符

    .vue文件中style标签的几个标识符 在人生就要绝望的时候, 被编辑器所提示的一个scopedSlots所拯救. 卧槽, 写到最后才发现这个属性的具体卵用. 详情见最后解决办法. 问题背景 问题由 ...

  6. 1-17finally关键字

    finally的特点 被finally控制的语句体一定会执行,除非在执行finally语句体之前JVM退出(比如System.exit(0)),一般用于关闭资源 finally如何使用? finall ...

  7. word-wrap与word-break为长单词换行

    如果你遇到长串英文单词或者url换行的问题,这时候就需要用到word-wrap与word-break这2个css属性啦. word-wrap:break-word;长单词与url地址自动换行. wor ...

  8. D. The Door Problem 带权并查集

    http://codeforces.com/contest/776/problem/D 注意到每扇门都有两个东西和它连接着,那么,如果第i扇门的状态是1,也就是已经打开了,那么连接它的两个按钮的状态应 ...

  9. Oozie是什么?

         但是,一般用Azkaban了.(具体见我写的另一篇博客:) 官网:https://oozie.apache.org/ Oozie is a workflow scheduler system ...

  10. 服务器php-cgi.exe进程过多,导致CPU占用100%的解决方法

    再使用iis服务器中经常会出现php-cgi.exe进程过多,导致CPU占用100%,最终造成网站运行过慢甚至卡死的情况,重启iis会好一会,过一段时间久出现这种情况,为什么会出现这种情况呢,应该怎么 ...