Golang中json与struct、map间的相互转换

本文介绍了如何在Go语言中将struct转换为json,json转换为struct,map转换为json以及json转换为map的过程。示例代码详细展示了Marshal和Unmarshal函数的使用,以及如何进行格式化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、struct转json

package main

import (
	"encoding/json"
	"fmt"
)

type Teacher struct {
	Name string
	Subject string
	Id int
}

func main()  {
	fmt.Println("----------struct转json----------")
//	准备struct数据
	tea :=Teacher{
		"Zhou",
		"Math",
		1001,
	}
	json_data , err :=json.Marshal(tea)
	if err!=nil {
		fmt.Println(err)
	}else {
		fmt.Println(string(json_data))//返回ASCII码,需要转换为字符串 {"Name":"Zhou","Subject":"Math","Id":1001}
	}
	//格式化json数据
	json_format ,errs := json.MarshalIndent(tea,"","  ") //生成前缀为空,缩进为两个空格的json数据
	if errs!=nil {
		fmt.Println(errs)
	}
	fmt.Println(string(json_format))
}

MarshalIndent函数格式化生成的数据

{
  "Name": "Zhou",
  "Subject": "Math",
  "Id": 1001
}

二、json转struct

package main

import (
	"encoding/json"
	"fmt"
)

type Teacher struct {
	Name string
	Subject string
	Id int
}

func main()  {
	var tea2 []Teacher
	json_byte := []byte(`[
	{"Name":"Qiao","Subject":"Math","Id":1001},
	{"Name":"Lu","Subject":"English","Id":1002}
	]`)
	 err2 := json.Unmarshal(json_byte,&tea2)
	if err2!=nil {
		fmt.Println(err2)
	}
	fmt.Println(tea2) //[]main.Teacher[{Qiao Math 1001} {Lu English 1002}]
}

三、map转json

package main

import (
	"encoding/json"
	"fmt"
)

func main(){
	var mp map[string]string //声明map变量
	mp = make(map[string]string)//分配内存空间
	//mp := make(map[string]string) //或者将上面的两部简化为一步
	mp["name"]="XiaoMing"
	mp["age"]="18"
	mp["message"]="Hello World"
	mp["like"]="Golang"
	fmt.Println("-----原生map数据--------")
	fmt.Println(mp)
	//生成未格式化的json数据
	mp_json,err := json.Marshal(mp)
	if err !=nil {
		fmt.Println(err)
	}else {
		fmt.Println(string(mp_json)) //{"age":"18","like":"Golang","message":"Hello World","name":"XiaoMing"}
	}

	fmt.Println("------生成格式化json数据------")
	mp_json_indent,error := json.MarshalIndent(mp,"","  ")//前缀为空,缩进为2个空格
	if error!=nil {
		fmt.Println(error)
	}else {
		fmt.Println(string(mp_json_indent))
	}

MarshalIndent函数格式化生成的数据

{
  "age": "18",
  "like": "Golang",
  "message": "Hello World",
  "name": "XiaoMing"
}

四、json转map

package main

import (
	"encoding/json"
	"fmt"
)
func main(){
	json_data :=`{"name":"XiaoJiang",
				"age":"17"}`
	json_mp :=make(map[string]interface{})
	json_err :=json.Unmarshal([]byte(json_data),&json_mp)
	if json_err!=nil {
		fmt.Println(json_err)
	}
	fmt.Println(json_mp) //map[age:17 name:XiaoJiang]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值