首页 > 其他分享 >golang JSON序列化和反序列化

golang JSON序列化和反序列化

时间:2024-04-12 09:04:16浏览次数:15  
标签:encoding json golang 字符串 JSON Go 序列化

目录


在Go语言(通常被称为Golang)中,JSON(JavaScript Object Notation)是一种常用的数据交换格式。Go标准库提供了encoding/json包,使得JSON的序列化(将Go数据结构转换为JSON格式的字符串)和反序列化(将JSON格式的字符串转换为Go数据结构)变得非常简单和直接。


JSON序列化(Marshaling)

序列化是将Go语言中的数据结构转换为JSON格式的字符串的过程。这通常用于网络通信或者文件存储。

下面是一个简单的例子,展示了如何将一个Go结构体序列化为JSON字符串:

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    user := User{Name: "John Doe", Age: 30}

    // 序列化用户对象到JSON
    jsonData, err := json.Marshal(user)
    if err != nil {
        // 处理错误
        fmt.Println("Error marshaling JSON:", err)
        return
    }

    // 打印JSON字符串
    fmt.Println(string(jsonData))
}

在上面的例子中,json.Marshal函数用于将User类型的实例转换为JSON编码的字节切片。如果序列化过程中出现错误,它会返回一个错误对象。


JSON反序列化(Unmarshaling)

反序列化是将JSON格式的字符串转换回Go语言的数据结构的过程。这通常用于解析从网络接收到的数据或者从文件中读取的数据。

下面是一个简单的例子,展示了如何将JSON字符串反序列化为Go结构体:

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    jsonString := `{"name":"John Doe","age":30}`

    // 创建一个用户对象
    var user User

    // 反序列化JSON字符串到用户对象
    err := json.Unmarshal([]byte(jsonString), &user)
    if err != nil {
        // 处理错误
        fmt.Println("Error unmarshaling JSON:", err)
        return
    }

    // 打印用户信息
    fmt.Printf("Name: %s, Age: %d\n", user.Name, user.Age)
}

在上面的例子中,json.Unmarshal函数用于将JSON格式的字符串解析到User类型的变量中。如果反序列化过程中出现错误,它会返回一个错误对象。


错误处理和注意事项

  • 在序列化和反序列化过程中,如果遇到任何问题,比如数据类型不匹配或者JSON格式不正确,encoding/json包会返回错误。因此,在使用json.Marshaljson.Unmarshal时,应该检查并妥善处理返回的错误。
  • encoding/json包在序列化时默认不会序列化零值字段(如0, false, ""等)。如果你需要序列化零值,可以使用omitempty标签。
  • 在反序列化时,如果JSON数据中包含了结构体中不存在的字段,encoding/json包会忽略这些字段。如果需要严格模式,可以使用json:"-"标签来标记那些不应该被忽略的字段。
  • 为了提高性能,如果你需要频繁地序列化和反序列化同一类型的数据,可以考虑使用encoding/json包的EncoderDecoder接口,这样可以减少内存分配和垃圾回收的开销。

通过使用Go语言的encoding/json包,你可以轻松地处理JSON数据,无论是在客户端应用、服务器端应用还是其他类型的Go程序中。

标签:encoding,json,golang,字符串,JSON,Go,序列化
From: https://www.cnblogs.com/yubo-guan/p/18130414

相关文章

  • 02-APIView和序列化
    常规通过CBV的写法#models.pyfromdjango.dbimportmodelsclassBook(models.Model):name=models.CharField(max_length=32)price=models.IntegerField()publish=models.CharField(max_length=64)classMeta:db_table="book&qu......
  • json list to excel
    每次从数据库导出数据交付产品的时候常需要把json拍成excel"""json_to_excel.py~~~~~~~json文件转换为excel文件(xlsx)注:最多容纳1048576行数据"""importosimportsysimportjsonimportopenpyxlfromopenpyxl.stylesimportNamedStyle,Font,A......
  • Hessian反序列化分析
    RPC协议RPC全称为RemoteProcedureCallProtocol(远程调用协议),RPC和之前学的RMI十分类似,都是远程调用服务,它们不同之处就是RPC是通过标准的二进制格式来定义请求的信息,这样跨平台和系统就更加方便RPC协议的一次远程通信过程如下:客户端发起请求,并按照RPC协议格式填充信息填充......
  • Golang 中 在gmp下,mutex 是如何并发的
    在Go语言的并发模型中,GMP(Goroutine、Machine、Processor)模型是核心概念,其中Mutex(互斥锁)扮演着关键的角色,用于同步并发访问共享资源,防止数据竞争和不一致性问题。以下是Mutex在GMP模型下实现并发的详细解释:Goroutines(协程)轻量级的线程:Goroutines是Go语言中的轻量级线程,它......
  • golang实现R6900路由器外网IP更新通知程序
    程序一分钟执行一次,检测路由器外网IP地址变更则自动发送邮件,使用网易126smtp协议发送邮件,邮箱地址及授权码请自行替换,getIp函数中的grep根据自己的网卡信息调试替换R6900路由器的交叉编译语句:CGO_ENABLED=0GOOS=linuxGOARCH=armGOARM=5gobuildxxxx.go1234567......
  • jackson 使用jsonNode与objectNode 实现访问json对象, 操作json对象
    前情提要因为现有项目都用的阿里巴巴的fastjson做json串的序列化与反序列化,但是fastJson的漏洞太多了,经常处理扫描出来的漏洞时,需要升级版本,导致出现各种大大小小的bug,经过考究,决定使用jackSon做新项目的序列化与反序列化工作,那先看一下常用的场景:将对象转为js......
  • 从0到1的二次反序列化
    前言简单介绍下二次反序列化,顾名思义,就是反序列化两次,其主要意义是绕过黑名单的限制或不出网利用,有些CTF题把一大堆关键类全都ban了,这就让人无从下手,二次反序列化就是为此而生的SignedObject原理看构造函数,接受一个可序列化的对象,再进行一次序列化,简直不要太perfect关注一下......
  • 认识学习JSON
    JSON:   json是一种轻量级的数据交换格式。   简单来说:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。   json在js中提供了两种方法:  JSON.parse():将JSON数据转换为对象或数组。  JSON.stringify():将对象或......
  • JS中的JSON(秒懂如何操作JSON)
    目录一、JSON介绍1.概念2.主要特点3.优点 4.使用JSON的原因使用XML使用JSON 二、JSON语法三、JSON使用1.JSON的序列化2.解析(parse)JSON3.序列化(Stringify)JSON四、JSON实例1.用户信息2.本地存储五、JSON应用场景六、总结一、JSON介绍1.概念JSON(JavaS......
  • 基于Golang的Nano游戏服务器框架
    在游戏开发过程中,一个高效的服务器框架是至关重要的。Nano正是这样一个框架,它以Golang为基础,提供了轻量级、高性能的服务器解决方案。下面,我们将深入探讨Nano的设计理念、核心特性以及如何在实战中使用它。Nano框架概述Nano是一个针对游戏服务器的框架,能够帮助开发者快速......