栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

java 结构体转json

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 结构体转json

1.1 struct to json 准备

很简单,使用encoding包可以互相转换,没什么好说的,但是有几点注意:

1.结构体内需要序列化的字段首字母大写(遵循驼峰式命名),不需要序列化的字段小写无所谓了

Username string `json:"username"` 将会使用username做json key值

2.如果需要序列化后的json key格式小写,需要加上json标签

`json:"password"`

3.json标签内,首字符如果是逗号,将使用字段输出,json标签内的指定key将自动忽略

`json:",password"` 加上逗号

4.如果需要忽略json输出,可以在json标签内,使用 '-',横线作忽略标记

`json:"-"` 作忽略

1.2结构体转json

func structToJson() {

user := User{5, "李长全", "1234"}

result, _ :=json.Marshal(user)

fmt.Println(string(result))

}

结果展示

这种方式输出的json,是一行展示,一般测试的时候,我会这样输出,方便做字符串比较,但是如果调试的时候,我习惯换一种方式,输出的是json格式化之后的字符串,这样就不用json工具做转换了

func structToJson() {

user := User{5, "李长全", "1234"}

result, _ := json.MarshalIndent(user, "", " ")

fmt.Println(string(result))

}

结果展示

1.3 struct to json

func structToJson() {

user := User{5, "李长全", "1234"}

result, _ := json.MarshalIndent(user, "", " ")

u := &User{}

json.Unmarshal(result, u)

fmt.Printf("%+vn", u)

}

2.1struct转map

func Struct2Map(obj interface{}) map[string]interface{} {

t := reflect.TypeOf(obj) //使用反射,k根据typeof拿到field

v := reflect.ValueOf(obj) //v根据valueof拿到interface

var data = make(map[string]interface{})for i := 0; i < t.NumField(); i++{

data[t.Field(i).Name]=v.Field(i).Interface()

}returndata

}

通过反射,拿到属性和值,属性做key,值做value,存储到map中,使用typeOf和valueOf,但是我当然是不喜欢了,我喜欢下面这种方式,使用valueOf就可以解决的问题,为啥非要多一步typeof

关于typeOf和valueOf,等我写反射的时候,再详细说

2.2反射第二种方式

func structToMap() {

a := User{1, "李长全", "1234"}

elem := reflect.ValueOf(&a).Elem()

types :=elem.Type()

m := map[string]interface{}{}for i := 0; i < types.NumField(); i++{

m[types.Field(i).Name]=elem.Field(i).Interface()

}

}

当然了,方法还有,结构转json,都会了,map转json也是一样的,那很简单了,通过json做中间转换一下啊, (a=b知道了,  b=c知道了  如何求ac,通过b转换啊)

2.3通过json转换

func structToEndMap() {

t :=time.Now()

m := make(map[string]interface{})

user := User{5, "李长全", "1234"}

j, _ :=json.Marshal(user)

json.Unmarshal(j,&m)

fmt.Println(m)

fmt.Printf("duration:%d", time.Now().Sub(t))

}

3.map转结构

map转结构,我看到一种写法使用第三方包,这个包叫mapstruct,只有decode方法,找半天,没找到encode,这么low么,我是不信的,只能map转成结构,结构无法回转吗,我是拒绝的

func MapToStruct() {

mapInstance := make(map[string]interface{})

mapInstance["name"] = "lcq"mapInstance["age"] = 28

varperson Userif err := mapstructure.Decode(mapInstance, &person); err !=nil {

fmt.Println(err)

}

fmt.Printf("struct:%v", person)

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号