golang生成JSON以及解析JSON

生成JSON:

在golang中生成JSON非常简单,可以使用标准库中的encoding/json包来实现。下面是一个示例代码:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name   string `json:"name"`          // json tag,用于指定json key的名称
    Age    int    `json:"age"`
    Gender string `json:"gender"`
}

func main() {
    person := Person{
        Name:   "张三",
        Age:    18,
        Gender: "男",
    }

    jsonString, err := json.Marshal(person)
    if err != nil {
        fmt.Println("生成json失败!")
    } else {
        fmt.Println(string(jsonString))
    }
}

在上面的代码中,我们定义了一个Person结构体,该结构体的字段通过json tag来指定生成的json key的名称。在main函数中,我们创建了一个Person类型的变量,并使用json.Marshal函数将其转换为JSON字符串输出。

输出结果为:

{"name":"张三","age":18,"gender":"男"}

如果要将生成的JSON字符串进行格式化输出,可以使用json.MarshalIndent函数,如下所示:

jsonString, err := json.MarshalIndent(person, "", "  ")

上面的代码中,第一个参数为要转换成JSON字符串的对象,第二个参数为每一层缩进的字符串,第三个参数为使用的缩进字符串,本例中每一层使用两个空格缩进。

解析JSON:

在golang中解析JSON也非常简单,仍然可以使用标准库中的encoding/json包来实现。下面是一个示例代码:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name   string `json:"name"`
    Age    int    `json:"age"`
    Gender string `json:"gender"`
}

func main() {
    jsonString := `{"name":"张三","age":18,"gender":"男"}`
    var person Person
    err := json.Unmarshal([]byte(jsonString), &person)
    if err != nil {
        fmt.Println("解析json失败!")
    } else {
        fmt.Println(person)
    }
}

在上面的代码中,我们定义了一个与生成JSON示例中相同的Person结构体。在main函数中,我们创建了一个包含JSON数据的字符串,然后使用json.Unmarshal函数将其转换为Person类型的对象,并输出转换后得到的Person对象。

输出结果为:

{张三 18 男}

如果JSON数据较大,我们可以使用json.Decoder来逐个解析JSON数据中的每个JSON对象,而不是一次性将整个JSON数据解码为一个对象,从而提高解析JSON数据的效率。示例如下:

package main

import (
    "encoding/json"
    "fmt"
    "strings"
)

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

func main() {
    jsonString := `{"users":[{"name":"张三","age":18},{"name":"李四","age":20}]}`
    decoder := json.NewDecoder(strings.NewReader(jsonString))

    for {
        var m map[string]interface{}
        err := decoder.Decode(&m)
        if err != nil {
            break
        }
        for k, v := range m {
            if k == "users" {
                users := v.([]interface{})
                for _, u := range users {
                    user := User{}
                    b, _ := json.Marshal(u)
                    json.Unmarshal(b, &user)
                    fmt.Println(user)
                }
            }
        }
    }
}

上面的代码中,我们定义了一个包含多个User对象的JSON数据。我们使用json.NewDecoder来创建一个json.Decoder,然后使用decoder.Decode方法逐个解析JSON数据中的每个JSON对象,最后将解析出来的JSON对象转换为User对象,并输出转换后得到的User对象。

输出结果为:

{张三 18}
{李四 20}
阅读剩余 63%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang生成JSON以及解析JSON - Python技术站

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

相关文章

  • Turbo C 2.0集成环境的使用教程

    Turbo C 2.0集成环境的使用教程 Turbo C 2.0是一个古老的C语言编程环境,由Borland公司开发。虽然它已经停止支持并淘汰多年,但是它仍然是一些编程者心中的经典。本教程将带您了解Turbo C 2.0的基本用法和一些代码示例。 安装Turbo C 2.0 首先我们需要安装Turbo C 2.0,您可以从网上下载Turbo C 2.0的安装…

    C 2023年5月23日
    00
  • Win10系统磁盘C:\盘空间太大如何缩小?分区工具进行Win10硬盘区分

    Win10系统磁盘C:\盘空间太大如何缩小?这是一个常见的问题,很多人都会面临这个问题。本文将介绍如何使用分区工具进行Win10硬盘区分。 准备工作 在进行分区前,我们需要准备以下工具: EaseUS Partition Master,这是一款免费的磁盘分区工具。 备份你的数据,因为对硬盘进行分区操作可能会导致数据丢失。 使用EaseUS Partition…

    C 2023年5月23日
    00
  • 利用C语言如何实现一些简单图形的打印

    我很乐意为您提供实现简单图形打印的攻略。 第一步:了解基本的图形打印原理 在利用C语言实现简单图形打印之前,我们需要先了解图形打印的基本原理。在C语言中,我们可以使用任何一种编程方式来打印图形,但是最常用的方法是使用ASCII码来实现。 ASCII码是一个包含了一些常见字符的标准编码系统。在ASCII码中,每个字符都有一个对应的数字,这个数字在C语言中可以通…

    C 2023年5月23日
    00
  • C++ cmake实现日志类的示例代码

    C++ cmake实现日志类的示例代码攻略 前置要求 安装cmake工具:在官网 https://cmake.org/download/ 下载对应系统的版本进行安装 C++编译器:这里以g++为例 IDE:这里以Visual Studio Code为例 步骤一:创建工程 利用cmake工具创建一个C++工程。 在项目根目录创建文件CMakeLists.txt…

    C 2023年5月23日
    00
  • Windows 2003 服务器安全设置图文教程

    针对“Windows 2003 服务器安全设置图文教程”的完整攻略,我给出如下的详细讲解。 Windows 2003 服务器安全设置图文教程攻略 为什么需要进行安全设置 Windows 2003服务器上的安全设置非常重要,它无论是对个人用户,还是企业用户,都拥有不可忽视的重要性。 首先,Windows 2003服务器安全设置可以保障服务器的安全稳定性,避免网…

    C 2023年5月22日
    00
  • C 字符串

    下面我来详细讲解 C 字符串的完整使用攻略。 什么是 C 字符串 C 字符串是指以 null 字符(’\0’)结尾的字符数组,也就是我们常说的以 ‘\0’ 结尾的字符序列。在 C 语言中,字符串是常用的一种数据类型,其可以用字符数组的形式来表示,例如: char str[] = "hello world"; 在上面的代码中,我们定义了一个…

    C 2023年5月10日
    00
  • 详解在VScode中添加代码块(含C++指令生成代码)

    下面我将详细讲解如何在VSCode中添加代码块,包括C++的指令生成代码。 添加代码块 使用方法 首先,打开你的VSCode编辑器,找到需要在其中添加代码块的文档。 然后,在你需要添加代码块的地方,输入三个撇号(“`),后面跟上对应的代码语言名称,再回车进入新一行,输入你的代码,最后在下一行输入三个撇号,这样就可以添加一个代码块了。 例如,如果你想添加C+…

    C 2023年5月24日
    00
  • C#命令行编译器配置方法

    下面是详细的C#命令行编译器配置攻略: 1. 下载.NET Core SDK 在开始配置之前,需要确保已经安装了.NET Core SDK。如果没有安装,可以前往 官方网站 下载并安装。 2. 配置PATH环境变量 在打开命令行终端之前,需要先配置PATH环境变量,这样系统才能找到编译器的安装路径。 Windows 用户可以这样操作: 打开“控制面板” -&…

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