一、示例

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. python中用代码实现99乘法表

    第一种:使用for遍历循环嵌套 ,): ,x+): print("%s*%s=%s" % (y,x,x*y),end=" ") print("&quo ...

  2. 浅谈线段树 (例题:[USACO08FEB]酒店Hotel)By cellur925

    今天我们说说线段树. 我个人还是非常欣赏这种数据结构的.(逃)因为它足够优美,有递归结构,有左子树和右子树,还有二分的思想. emm这个文章打算自用,就不写那些基本的操作了... 1° 简单的懒标记( ...

  3. elasticsearch映射 mapping

    mapping的格式个应用,主要是创建索引(数据库)的时候指明type 的field类型,然后elasticsearch可以自动解析

  4. 洛谷 P2759 奇怪的函数

    https://www.luogu.org/problemnew/show/P2759 #include<cstdio> #include<algorithm> #includ ...

  5. 复习Java和前端、后端框架等。

    以下便是我开始复习时做的笔记.

  6. Oracle JDK各版本下载地址记录

    Oracle JDK各版本下载地址: https://www.oracle.com/technetwork/java/javase/archive-139210.html

  7. MAX458X多通道模拟切换开关(类似74HC4051)

  8. 使用Appache部署WEB服务器

    Apache的起源(这个就不说了,百度下就都有了) 简介:Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行, ...

  9. Python实现决策树ID3算法

    主要思想: 0.训练集格式:特征1,特征2,...特征n,类别 1.采用Python自带的数据结构字典递归的表示数据 2.ID3计算的信息增益是指类别的信息增益,因此每次都是计算类别的熵 3.ID3每 ...

  10. 学习Python的day1

    自己以前从来没有写博客的想法,但是学Python,里面的老师也说了,写博客可以加深自己的记忆,也能回顾内容.还能给别人参考.挺值的.2017-09-16 一. Python介绍 python的创始人为 ...