golang生成JSON以及解析JSON

yizhihongxing

生成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}

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

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

相关文章

  • CCleaner怎么关闭自动更新?CCleaner关闭自动更新方法

    当你安装CCleaner之后,它默认会启用自动更新功能,这意味着即使你不手动检查更新,它也会在后台自动下载并安装新版本的CCleaner。对于一些用户来说,这可能不是一个理想的操作行为。那么,如何关闭CCleaner自动更新呢?下面是详细的步骤。 方法一:通过CCleaner程序关闭自动更新 打开CCleaner程序,点击左下角的“选项”按钮。 切换到“设置…

    C 2023年5月23日
    00
  • C语言实验报告范例

    实验报告四 一, 实验类型:设计型 二, 实验室: 三, 指导老师: 四, 日期: 五, 实验名称:if分支语句的嵌套 六, 实验目的: 1, 学习if嵌套结构,能够用C语言编程解决日常生活的实例 2, 明确if语句在实现分支结构控制语句方面的特点和优势 3, 熟练掌握关系运算符、关系表达式、逻辑运算符和逻辑表达式、条件运算符和条件表达式,会使用if分支语句…

    C 2023年4月25日
    00
  • C++中strcpy函数的实现

    C++中的strcpy函数是用于将一个字符串复制到另一个字符串中的函数。其原型为: char *strcpy(char *dest, const char *src); 其中,dest代表目标字符串,src代表源字符串。 以下是strcpy函数的实现过程: 首先判断源字符串和目标字符串是否为 NULL。如果是,则直接返回 NULL。 然后将 src 指针所指…

    C 2023年5月23日
    00
  • 常用的C语言编程工具汇总

    常用的C语言编程工具汇总 概述 C语言是一种非常流行的高级编程语言,开发者们常常使用各种工具来编写、调试、测试他们的C代码。在这里我们进行简单的介绍,列出一些主要的C语言编程工具及其用途。 编辑器 编辑器是C语言编程过程中最基本的工具之一。通常用来编写代码。常用的C语言编辑器有: 1. Visual Studio Code Visual Studio Cod…

    C 2023年5月23日
    00
  • C语言矩阵连乘 (动态规划)详解

    C语言矩阵连乘 (动态规划)详解 算法原理 矩阵乘法不满足交换律和结合律,因此计算矩阵连乘的顺序会影响计算时间。即使只有6个矩阵相乘,也有可能有超过百万种计算次序。因此需要通过算法来优化时间复杂度。动态规划是一种可用于求解最优化问题的算法,它将原问题分解为子问题求解,并将每个子问题的最优解存储在表格中,以便在较大的子问题中简化计算。 设矩阵 $A_{1 \t…

    C 2023年5月24日
    00
  • 使用typescript+webpack构建一个js库的示例详解

    让我们来讲解一下“使用TypeScript+Webpack构建一个JS库的示例详解”。 环境准备 首先,我们需要准备好环境。具体来说,需要安装以下软件:- Node.js- TypeScript- Visual Studio Code 或者其他编辑器 创建项目 首先,我们需要创建一个新的项目。在终端中执行以下命令,创建一个新的目录并进入该目录: mkdir …

    C 2023年5月23日
    00
  • php获取一定范围内取N个不重复的随机数

    想要获取一定范围内取N个不重复的随机数,在 PHP 中可以采用下面这个简单的方法: <?php $min = 1; $max = 10; $n = 5; $numbers = range($min, $max); shuffle($numbers); $random_numbers = array_slice($numbers, 0, $n); pri…

    C 2023年5月23日
    00
  • C++利用jsoncpp库实现写入和读取json文件

    下面是C++利用jsoncpp库实现写入和读取json文件的完整攻略。 安装jsoncpp库 首先需要安装jsoncpp库,可以通过以下方式进行安装: 使用apt-get命令在Ubuntu系统下安装: sudo apt-get install libjsoncpp-dev 使用yum命令在CentOS系统下安装: sudo yum install jsonc…

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