迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Go >

如何将 Go 结构体转换为 JSON

作者:迹忆客 最近更新:2023/03/13 浏览次数:

JSON 是一种轻量级语言独立格式,用于存储和传输数据。在 Go 中,我们有 encoding/json 包,其中包含许多用于 JSON 相关操作的内置方法。我们可以使用封送处理将结构数据转换为 JSON。

将 Go 结构体转换为 JSON

marshal 方法接收结构对象并返回编码数据的字节片,我们可以在 Go 中将其更改为 JSON。

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name   string `json:"empname"`
    Number int    `json:"empid"`
}

func main() {
    employee_1 := &Employee{Name: "Dixya Lhyaho", Number: 10}
    e, err := json.Marshal(employee_1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(e))
}

输出:

{"empname":"Dixya Lhyaho","empid":10}

如果将 Number 属性更改为 number,则编组过程中将忽略 number,因为 json/encoding 包看不到它。

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name   string `json:"empname"`
    number int    `json:"empid"`
}

func main() {
    employee_1 := &Employee{Name: "Dixya Lhyaho", number: 10}
    e, err := json.Marshal(employee_1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(e))
}

输出:

{"empname":"Dixya Lhyaho"}

在 Go 中将嵌套结构转换为 JSON

让我们用嵌套结构定义一个更复杂的结构。在结构的定义内,我们定义了 JSON 标记,这些标记将结构的字段直接映射到封送处理的 JSON 中的字段。

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Position string `json:"position"`
    Name     Name   `json:"name"`
}

type Name struct {
    FirstName string `json:"firstname"`
    Surname   string `json:"surname"`
}

func main() {
    name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
    employee := Employee{Position: "Senior Developer", Name: name}

    byteArray, err := json.Marshal(employee)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(byteArray))
}

输出:

{"position":"Senior Developer","name":{"firstname":"Dikxya","surname":"Lhyaho"}}

Go 中结构体到 JSON 转换的缩进

我们可以使用 json.MarshalIndent() 函数代替 json.Marshal() 函数以更易读的格式打印 JSON。我们将两个附加参数,前缀字符串和缩进字符串传递给 MarshalIndent

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Position string `json:"position"`
    Name     Name   `json:"name"`
}

type Name struct {
    FirstName string `json:"firstname"`
    Surname   string `json:"surname"`
}

func main() {
    name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
    employee := Employee{Position: "Senior Developer", Name: name}

    byteArray, err := json.MarshalIndent(employee, "", "  ")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(byteArray))
}

输出:

{
  "position": "Senior Developer",
  "name": {
    "firstname": "Dikxya",
    "surname": "Lhyaho"
  }
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

C# 中的结构体和类之间的区别

发布时间:2024/02/01 浏览次数:186 分类:编程语言

结构体是驻留在堆栈中的值类型变量,而类是驻留在堆中的引用类型变量。在本教程中,我们将讨论 C# 中的结构体和类之间的区别和相似之处。

C++ 中的结构体构造函数

发布时间:2023/09/02 浏览次数:98 分类:C++

这篇文章将讨论 struct 的使用以及使用 C++ 添加构造函数。C++结构体简介 struct 代表结构,是组合了一些基本类型变量的用户定义数据类型。 这些变量混合起来形成一个新的单元。

C++ 中的结构体继承

发布时间:2023/08/27 浏览次数:586 分类:C++

结构体和类很相似,但不同之处在于它们对面向对象编程中其他类或函数的可访问性。默认情况下,结构被指定为公共的,而类是私有的。 并且在继承中,我们不能继承私有指定的类; 我们必

C++ 结构体默认值初始化

发布时间:2023/08/26 浏览次数:685 分类:C++

本文将介绍如何在 C++ 中初始化结构体中的默认值。在 C++ 中初始化结构中的默认值 初始化默认值主要有两种方法; 第一个是使用构造函数,第二个是不使用构造函数。

C++ 匿名结构体

发布时间:2023/08/26 浏览次数:254 分类:C++

本文介绍了 C++ 中匿名结构的使用。C++ 中的匿名结构体 C++ 不支持匿名结构体,因为 C 语言也不支持匿名结构,但与 C 不同,C++ 确实支持匿名联合。

C++ 中结构体和类的区别

发布时间:2023/08/23 浏览次数:71 分类:C++

本文解释了 C++ 中结构体和类之间的区别。 本文是针对最新版本的 C++ 编写的; 旧版本中的结构和类之间存在更多限制和差异。在大多数情况下,结构与类非常相似,但差异很少。 让我们一一

在 C 语言中初始化结构体

发布时间:2023/05/07 浏览次数:248 分类:C语言

本文介绍了如何在 C 语言中初始化一个结构体。使用初始化列表风格的符号来初始化 C 语言中的一个结构体

在 C 语言中使用结体构对齐和填充

发布时间:2023/05/07 浏览次数:201 分类:C语言

本文演示了如何在 C 语言中使用结构体进行对齐和填充。了解 C 语言中对齐和填充的基础知识 内存中的所有对象都以主要数据类型表示

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便