Go JSON编码与解码的实现

Go JSON编码与解码的实现

在Go语言中,JSON编码与解码非常常见,Golang标准库提供了encoding/json包来支持JSON格式数据的序列化和反序列化。接下来将详细讲解如何使用encoding/json包进行JSON编码与解码。

JSON编码

JSON编码,指将Go语言中的结构体等数据类型转换成JSON格式的字符串。在Go语言中,使用json.Marshal()函数进行JSON编码。

示例1:将一个结构体转换成JSON格式字符串,输出结果。

type Book struct {
    Title string `json:"title"`
    Author string `json:"author"`
    Price float64 `json:"price"`
}

book := Book{
    Title: "Go语言编程",
    Author: "Xiao Lin",
    Price: 30.5,
}

jsonStr, err := json.Marshal(book)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s\n", jsonStr)

以上代码输出结果为:

{"title":"Go语言编程","author":"Xiao Lin","price":30.5}

示例2:JSON编码一个嵌套的结构体,并将结果输出到控制台。

type Address struct {
    City string `json:"city"`
    Phone string `json:"phone"`
}

type Person struct {
    Name string `json:"name"`
    Age int `json:"age"`
    Address Address `json:"address"`
}

person := Person{
    Name: "Alice",
    Age: 20,
    Address: Address{
        City: "Beijing",
        Phone: "123456",
    },
}

jsonStr, err := json.Marshal(person)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s\n", jsonStr)

以上代码输出结果为:

{"name":"Alice","age":20,"address":{"city":"Beijing","phone":"123456"}}

JSON解码

JSON解码,指将JSON格式的字符串转换成对应的Go语言数据类型。在Go语言中,使用json.Unmarshal()函数进行JSON解码。

示例3:将以JSON格式编码的字符串解码,输出结果。

jsonStr := `{"title":"Go语言编程","author":"Xiao Lin","price":30.5}`
var book Book
err := json.Unmarshal([]byte(jsonStr), &book)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%+v\n", book)

以上代码输出结果为:

{Title:Go语言编程 Author:Xiao Lin Price:30.5}

示例4:JSON解码,演示如何解析一个“动态”JSON对象。

jsonStr2 := `{"name":"Bob","age":23,"address":{"city":"Shanghai","phone":"654321"}}`
var dynamicMap map[string]interface{}
err = json.Unmarshal([]byte(jsonStr2), &dynamicMap)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("Name: %v, Age: %v, City: %v, Phone: %v\n",
    dynamicMap["name"], dynamicMap["age"],
    dynamicMap["address"].(map[string]interface{})["city"],
    dynamicMap["address"].(map[string]interface{})["phone"])

以上代码输出结果为:

Name: Bob, Age: 23, City: Shanghai, Phone: 654321

总结

encoding/json包提供了Go语言中JSON编码与解码的基础API。我们可以使用它来编码和解码JSON格式的数据。通过本文介绍的示例,相信读者已经学会了如何使用encoding/json进行JSON编码和解码的基本使用技巧。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go JSON编码与解码的实现 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 上网出现20种错误信息的分析

    上网出现20种错误信息的分析 当我们上网时,难免会遇到各种各样的错误信息,有些可能会给我们造成一定的困扰,甚至影响我们的正常使用。这篇文章将分享一些常见的错误信息及其解决方案,帮助读者更好地理解和解决问题。 1. DNS错误 描述: 当你输入一个网址时,会出现“无法访问网站”或“未找到服务器”的提示,这通常是DNS错误导致的。 解决方案: 检查你的网络设置,…

    C 2023年5月23日
    00
  • c# 如何实现一个简单的json解析器

    C# 如何实现一个简单的 JSON 解析器 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。在 C# 中,我们可以通过 Newtonsoft.Json 库方便地进行 JSON 的序列化和反序列化。但是,如果我们想自己实现一个简单的 JSON 解析器,该怎么做呢?本文将在讲解基本原理的同时…

    C 2023年5月23日
    00
  • 详解Python 协程的详细用法使用和例子

    详解Python 协程的详细用法使用和例子 简介 协程(Coroutine)是一种能够暂停执行并保存状态以便之后恢复执行的函数。在Python中,协程可用于高效的异步编程。通过使用async/await语法,我们可以创建协程对象并通过事件循环(Event Loop)的调度运行它们。 协程的基本使用 定义一个协程函数的标准语法如下: async def cor…

    C 2023年5月23日
    00
  • C语言实现进程5状态模型的状态机

    关于“C语言实现进程5状态模型的状态机”的攻略,下面是我整理的一些内容。 状态机介绍 状态机(State Machine)可以将一个系统或者一个对象的现实行为转化为状态表或者状态图的形式,从而利用一定的算法去操作或者分析这个系统/对象。在计算机领域中,状态机通常被用于解决诸如网络协议、编译器、游戏AI等的逻辑控制问题。 在操作系统中,进程的状态机通常被分为5…

    C 2023年5月23日
    00
  • C语言实现栈的示例代码

    下面我会给您讲解一下C语言实现栈的示例代码的完整攻略。 一、栈的定义 栈(Stack)是一种只能在一端进行插入或删除操作的线性表。栈按照先进后出(Last in First Out)的原则进行操作,也就是说后插入进去的元素先被删除。 栈的两个特殊点: 栈底:数据插入的一端,即数据结构的初始位置。 栈顶:栈最近插入的元素所在的位置。 二、栈的操作 栈的基本操作…

    C 2023年5月23日
    00
  • 菜鸟记录:c语言实现PAT甲级1003–Emergency

      久违的PAT,由于考研408数据结构中有一定需要,同时也是对先前所遗留的竞赛遗憾进行一定弥补 ,再次继续PAT甲级1003.。 As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several s…

    C语言 2023年4月17日
    00
  • C if else if ladder

    C 语言中的 if else if 梯形结构又被称作 if else if ladder,它是多个条件语句的嵌套,可以用来实现复杂的条件判断。以下是 if else if ladder 的完整使用攻略: 梯形结构语法格式 if (condition1) { statement1; } else if (condition2) { statement2; } …

    C 2023年5月9日
    00
  • C语言学生信息管理系统设计与实现

    C语言学生信息管理系统设计与实现 1. 系统设计 1.1 系统需求分析 在开始实现C语言学生信息管理系统之前,我们需要先进行系统需求分析。从用户需求中得知,该系统需要支持以下功能: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 显示所有学生信息 除此之外,还需要能够保存所有学生信息,方便下次打开程序时能够直接读取已有的学生信息。 1.2 系统架构设…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部