Golang struct,map,json 之间的转换

本文介绍了Golang中struct、map和json之间的转换方法,包括使用encoding/json包的Marshal和Unmarshal API,以及通过反射库reflect进行转换的详细步骤。文章还探讨了reflect库的相关API,如TypeOf和ValueOf,以及如何通过这些工具进行字段访问和赋值。
摘要由CSDN通过智能技术生成

Golang struct,map,json 之间的转换

起步

利用 Go 写一个项目时,比如常见的 web server,很容易涉及到 struct,map,json 三者之间的转换。这里想简单总结下,帮助一些刚入坑的朋友。

struct <=> json

不论是 struct => json 还是 json => struct 都尤为简单,这是因为标准库 encoding/json 提供了友好的 API。

示例代码如下:

// struct_json_test.go
package main

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

// StructToJSON ...
func StructToJSON(o interface{
   }) string {
   
	// 确保 o 是结构体(没有必要时,校验代码可以删除)
	if reflect.TypeOf(o).Kind() != reflect.Struct {
   
		log.Fatal("need struct")
	}

	// []byte, error
	strJSON, _ := json.Marshal(o)
	// []byte => string
	return string(strJSON)
}

// JSONToStruct ...
func JSONToStruct(s string, targetPtr interface{
   }) {
   
	// string => []byte
	sBytes := []byte(s)
	// 填充目标结构体
	json.Unmarshal(sBytes, targetPtr)
}

// TestCurCode ...
func TestCurCode(t *testing.T) {
   
	// 定义一个 Student 结构体
	type Student struct {
   
		Name string
		Age  int
	}

	stu := Student{
   "zty", 18}
	strJSON := StructToJSON(stu)
	t.Logf("type: %T\n", strJSON)
	t.Logf("value: %s\n", strJSON)

	// 定义一个 JSON 字符串
	var JSONStr = `
	{
		"Name": "zty",
		"Age": 18
	}
	`
	target := Student{
   }
	JSONToStruct(JSONStr, &target)
	t.Logf("type: %T\n", target)
	t.Logf("value: %v\n", target)
}

struct 与 json 之间的转换主要靠两个 API:

  • json.Marshal
  • json.Unmarshal

需要注意 json.Unmarshal 的第二个参数是目标结构体的地址。

map <=> json

// struct_json_test.go
package main

import (
	"encoding/json"
	"testing"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值