有关转换Json字段 类型的问题

来源:13-4 第三方API数据格式的解析技巧

EnzoLiu

2021-07-31

老师,我提问一个与课程关联不大,但实际开发过程中遇到的问题
如果我要把 Json 当中所有类型的数据转换为字符类型,该怎么做才更合适?比如下面这个例子:

{
    "name": "example",
    "age": 18,
    "mobile": 15555555555,
    "isAdmin": true
}

想要变成:

{
    "name": "example",
    "age": "18",
    "mobile": "15555555555",
    "isAdmin": "true"
}

我目前是通过下面这种 reflect 配合 switch 来实现的,总感觉有些冗余

    ... 这里省略部分代码
    
    // 准备要写出的最终数据
	var wData []string
	
	t := reflect.TypeOf(info)
	v := reflect.ValueOf(info)
	for i := 0; i < t.NumField(); i++ {
		// 字段值
		f := v.Field(i)
		var val string
		switch f.Kind() {
		case reflect.Bool:
			val = strconv.FormatBool(f.Bool())
		case reflect.Int:
			val = strconv.FormatInt(f.Int(), 10)
		case reflect.String:
			val = f.String()
		}
		wData = append(wData, val)
	}
写回答

1回答

ccmouse

2021-08-08

json的自定义格式化虽然可以,但也不是太方便。不过好像也有别人有和同学差不多的需求,我们只要在每个字段后面加上string tag即可。

package main


import (

     "encoding/json"

     "fmt"

)


func main() {

     j := struct {

         Name    string

         Age     int  `json:"age,string"`

         IsAdmin bool `json:"is_admin,string"`

     }{

         Name:    "abc",

         Age:     18,

         IsAdmin: true,

     }

     b, err := json.Marshal(j)

     if err != nil {

          panic(err)

     }

     fmt.Printf("%s\n", b)

}


https://play.studygolang.com/p/9SaNBtVmHIA


3
1
EnzoLiu
完美的解决方案!谢谢老师
2021-08-08
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程