Golang实现结构体和Json格式数据之间的互相转换

 更新时间:2025年12月18日 09:21:19   作者:BPDZZ  
这篇文章主要为大家详细介绍了Golang实现结构体和Json格式数据之间的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

摘要

本节主要学习Golang结构体和JSON序列化数据的转换命令。

1. 结构体到json格式

1.1 简单转换

Golang结构体转换成JSON格式数据,主要在结构体的相关字段中加入json : "keyword"字段。具体做法如下:

type Structname struct{
	feild1 Type1 `json:"keyword1"`
	feild2 Type2 `json:"keyword2"`
}

相关具体实例如下:

package message

import (
	"encoding/json"
	"log"
	"testing"
)

type Information struct{
	Name string `json:"name"`
	Addr string `json:"addr"`
}

func TestStructure(t *testing.T){
	var inf Information
	inf.Name="Alice"
	inf.Addr="Green Street"
	data,err:=json.Marshal(inf)
	if err!=nil{
		panic(err)
	}
	log.Println(string(data))
}

1.2 递归转换

为了转换一个嵌套结构体为JSON格式文件,首先在需要转换的结构体中构建json:"keyword"字段,其次,构建一个嵌套的Golang结构体,最后利用Json.Marshal函数进行转换。

package message

import (
	"encoding/json"
	"errors"
	"log"
	"testing"
)

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

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

func TestStructure(t *testing.T){
	name:=Name{FirstName:"Zhang",Surname:"san"}
	employee:=Employee{Position:"China",Name: name}
	person,err:=json.Marshal(employee)
	if err!=nil{
		panic(errors.New("Wrong Converting behavior"))
	}
	log.Println(string(person))
}

2. json格式到结构体

2.1 简单转换

JSON格式数据转换为Golang结构体的过程,利用Json.Ummarshal函数进行转换,具体转换例子如下:

package message

import (
	"encoding/json"
	"log"
	"testing"
)

type Information struct{
	Name string `json:"name"`
	Addr string `json:"addr"`
}

func TestStructure(t *testing.T){
	alice:="{\"name\":\"Alice\",\"addr\":\"Green Street\"}"
	inf:=new(Information)
	err:=json.Unmarshal([]byte(alice),inf)
	if err!=nil{
		panic(err)
	}
	log.Println(inf)
}

2.2 嵌套JSON格式数据转换

类似于嵌套结构体转换到JSON格式的过程,从JSON格式数据转换到嵌套结构体数据的过程,就是首先构建嵌套JSON格式数据,其次通过Json.Ummarshal函数转换为嵌套结构体数据。

package message

import (
	"encoding/json"
	"log"
	"testing"
)

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

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

func TestStructure(t *testing.T){
	str:="{\"position\":\"China\",\"name\":{\"firstname\":\"Zhang\",\"surname\":\"san\"}}"
	person1:=new(Employee)
	json.Unmarshal([]byte(str),person1)
	log.Println(person1,person1.Name)
}

以上就是JSon格式数据和Golang结构体之间的数据转换过程。

到此这篇关于Golang实现结构体和Json格式数据之间的互相转换的文章就介绍到这了,更多相关Golang结构体和Json互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入探讨Go语言中的内存分配策略从堆到栈

    深入探讨Go语言中的内存分配策略从堆到栈

    内存管理是一个持续优化的过程,需要开发者在实际开发中不断积累经验,根据具体场景选择合适的内存分配策略,本文将深入探讨Go语言中的内存分配策略,从堆到栈的工作原理,以及如何优化内存使用,帮助开发者写出更高效、更稳定的Go程序
    2026-05-05
  • Go语言变量初始化的实现示例

    Go语言变量初始化的实现示例

    在Go语言中,变量的初始化是编写程序时经常遇到的重要操作之一,本文主要介绍了Go语言变量初始化的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Go Java 算法之字符串解码示例详解

    Go Java 算法之字符串解码示例详解

    这篇文章主要为大家介绍了Go Java 算法之字符串解码示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 浅谈Go语言中高效并发模式

    浅谈Go语言中高效并发模式

    Go语言并发编程提供了丰富的模式,包括基础Goroutine、Channel和Select机制,以及多种高级并发模式,本文就来详细的介绍一下,感兴趣的可以了解一下
    2025-10-10
  • 详解Go语言如何判断两个对象是否相等

    详解Go语言如何判断两个对象是否相等

    在编程中,判断两个对象是否相等是一项常见的任务,同时判断对象是否相等在很多情况下都非常重要,所以在接下来的内容中,我们将详细介绍在 Go 语言中如何判断对象是否相等的方法和技巧,需要的可以参考一下
    2023-06-06
  • go 读取BMP文件头二进制读取方式

    go 读取BMP文件头二进制读取方式

    这篇文章主要介绍了go 读取BMP文件头二进制读取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go并发编程实现数据竞争

    Go并发编程实现数据竞争

    本文主要介绍了Go并发编程实现数据竞争,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Golang操作命令行的几种方式总结

    Golang操作命令行的几种方式总结

    这篇文章主要介绍了Golang操作命令行的几种方式总结,文章通过围主题思想展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Go语言数据类型简单介绍

    Go语言数据类型简单介绍

    这篇文章主要介绍了Go语言数据类型简单介绍的相关资料,需要的朋友可以参考下
    2023-08-08
  • Go for-range 的 value值地址每次都一样的原因解析

    Go for-range 的 value值地址每次都一样的原因解析

    循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型,这篇文章主要介绍了Go for-range 的 value值地址每次都一样的原因解析,需要的朋友可以参考下
    2023-05-05

最新评论