有关转换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回答
-
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
312021-08-08
相似问题