Go JSON编码与解码的实现

yizhihongxing

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日

相关文章

  • C语言实现飞机大战小游戏完整代码

    C语言实现飞机大战小游戏完整代码攻略 游戏简介 飞机大战游戏是一款飞行射击类的小游戏,主要玩家在游戏中扮演一位勇敢的飞行员,驾驶战斗机与敌军进行激烈的空中战斗,打击敌人并获取高分。 必要工具 C语言编译环境 简单的图形库,以下是WinBGIm的链接:http://www.lerner.co.il/wp-content/uploads/2014/04/WinB…

    C 2023年5月24日
    00
  • C、C++程序中的堆栈损坏问题

    题目中的“堆栈损坏问题”指的是指针操纵错误,这种错误经常出现在使用 C、C++ 等语言编写的程序中,如何解决这种问题呢? 什么是堆栈损坏 堆栈损坏是指在代码中对于已经申请的内存没有正确的管理,导致程序崩溃的错误。分为以下两种情况: 数组越界:在数组申请时预估错误导致数组越界,比如数组长度为10,但却访问了11个元素,这会导致程序崩溃。 内存泄漏:在申请堆内存…

    C 2023年5月9日
    00
  • C语言中的正则表达式使用示例详解

    C语言中的正则表达式使用示例详解 正则表达式是一种通用的文本匹配模式,可以在C语言中用来进行字符串的匹配和处理。C语言提供了regex库来支持正则表达式的使用。接下来,将为您详细讲解C语言中正则表达式的使用,包括正则表达式语法、函数调用和示例说明。 正则表达式语法 正则表达式语法是一组规则,用于描述文本模式匹配的方式。在C语言中,正则表达式的语法由一些特殊字…

    C 2023年5月23日
    00
  • C语言求阶乘之和的三种实现方法(先阶乘再累加)

    当我们需要计算n的阶乘之和时,可以采用以下三种方法进行实现: 方法一:单层for循环 在本方法中,我们可以将for循环的条件直接设为i<=n即可,每次循环计算i的阶乘并加到sum中,最后输出sum即可。 示例代码: #include <stdio.h> int main() { int n, sum=0, factorial=1; prin…

    C 2023年5月23日
    00
  • C语言实现分治法实例

    C语言实现分治法实例 分治法(Divide and Conquer)是一种处理问题的思想,它的基本思路是:将一个复杂的问题分成两个或更多的子问题,对每一个子问题进行解决,然后将子问题的解合并得到原问题的解。 在C语言中,实现分治法可以通过使用递归函数来实现。 分治法基本思路 分治法基本思路如下: 分解(Divide): 将问题划分成一些子问题,子问题的形式与…

    C 2023年5月23日
    00
  • C语言实现矩阵运算案例详解

    C语言实现矩阵运算案例详解 简介 矩阵是线性代数中非常重要的概念,也是很多领域中经常用到的数学工具。在计算机科学中,矩阵也得到了广泛的应用。在这篇文章中,我们将介绍如何使用C语言实现矩阵的基本运算,包括相加、相乘、转置、求逆等操作。我们将使用标准C语言来实现这些操作,不需要任何额外的库。 矩阵的基本操作 矩阵的表示 在讨论矩阵的操作之前,我们需要先了解矩阵的…

    C 2023年5月23日
    00
  • C语言的fork函数在Linux中的进程操作及相关面试题讲解

    C语言的fork函数是Unix和Linux操作系统中常用的进程操作函数之一。该函数的作用是在当前进程的基础上创建一个新进程,这个新进程叫做子进程。该函数返回两次,一次是在父进程中返回子进程的进程ID,另一次是在子进程中返回0。因此,程序中需判断返回值,便可以确定是在父进程还是子进程中。 下面我来详细讲解”C语言的fork函数在Linux中的进程操作及相关面试…

    C 2023年5月30日
    00
  • 使用c语言输出杨辉三角形的简单方法

    要在C语言中输出杨辉三角形,可以使用嵌套循环结构和两个数组。下面是完整的攻略: 1. 定义两个数组 首先,我们需要定义两个一维数组。数组a将保存上一行的数值,数组b将用于保存当前行的数值。这样,我们就可以使用a数组中的数据来计算下一行,然后将b数组中的数据输出。 #include <stdio.h> int main() { int a[10],…

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