另一方面,Json和struct互换

)1)从Json迁移到struct的示例:

打包主

import (

' fmt '。

'编码/strong森'

类型人造结构

名称字符串` JSon : '名称_标题`

Age int `json:'age_size `

}

func JsonToStructDemo

jsonStr :=`

{

'名称_标题' : ' jqw '

' age_size':12

}

`

太空望远镜

JSON.unmarshal ([ ]字节(JSON str ),皮奥普尔) )。

FMT.Println (人物) )。

}

功能主()

使用JsonToStructDemo (

}

输出:

请注意,json中的关键点和结构中的关键点匹配。 结构中key的首字母必须大写,但json可以是大写或小写。

)2)从结构到json

在结构中引入tag标签以进行这样的匹配时,与json字符串相对应的字段名称必须与tag标签中定义的字段名称相匹配。 当然,在tag中定义的名称不需要大写,对应的json字符串的字段名称保持大小写不敏感。 此时,结构体中的对应字段名可以与匹配不一致,但首字母必须是大写字母,只有大写字母可以对外访问。

示例:

打包主

import (

' fmt '。

'编码/strong森'

类型人造结构

名称字符串` JSon : '名称_标题`

Age int `json:'age_size `

}

func StructToJsonDemo

p :=人物

名称: ' jqw ',

Age: 18,

}

jsonBytes,err :=json.Marshal(p (

红外!=聂耳

FMT .打印机(错误) )。

}

fmt.println (字符串(日本字符串) () ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

}

功能主()

StructToJsonDemo (

}

输出:

二、json与map的相互旋转

)1)从json迁移到map的示例:

func JsonToMapDemo (

jsonStr :=`

{

'名称' : ' jqw ',

' age': 18

}

`

varmapresultmap [字符串]界面

err :=JSON.Unmarshal ([ ]字节(JSON STR,mapResult ) ) ) ) ) ) ) ) ) ) ) ) )。

红外!=聂耳

FMT.Println (JSontomapdemoerr :err ) )。

}

FMT.Println (制造商) )。

}

输出:

)2)从map向Json的转移示例

func MapToJsonDemo1(

地图实例:=地图字符串界面

instance _ 1:=map [ string ] interface { ' name ' : '约翰',' age': 10}

instance _ 2:=map [ string ] interface { ' name ' : '无情的乌冬面',' age': 12}

贴图实例=应用(贴图实例,实例1,实例2 ) ) ) ) ) ) )。

jsonStr,ERR :=JSON.Marshal (地图实例) ) ) ) )。

红外!=聂耳

FMT.Println (MaptoJSondemoerr :err ) ) )。

}

FMT.Println (字符串) JSONstr ) )

}

输出:

示例2 :

func MapToJsonDemo2(

b,_ :=JSON.Marshal (地图字符串int ('测试' :1,'特里' :2 } ) ) ) ) ) ) ) ) ) ) )。

FMT.Println (字符串(b ) )

}

输出:

三、map与struct的相互旋转

(1)从地图到结构

需要第三方库

在命令行上运行: gogetgithub.com/going go/map结构

示例:

func映射结构演示

map实例:=make (map (字符串界面) ) ) ) ) )。

map实例[ '名称' ]=' jqw '

地图实例[ ' age ' ]=18

太空望远镜

err :=地图结构.解码(地图实例,人物)。

红外!=聂耳

FMT .打印机(错误) )。

}

FMT.Println (人物) )。

}

输出功率

)2)从结构转移到地图的示例

funcstructtomapdemo对象界面地图

obj1:=反射.类型of (obj )

obj2:=反射值(obj )

vardata=make (地图字符串界面)

for i :=0; I obj1.数字字段(; I

data [ obj1.字段(I ) .名称]=obj2.字段(I ) .接口]

}

返回数据

}

func测试结构图

student :=Student{10,' jqw ',18}

data :=结构模型(student )

FMT.Println (数据) )。

}

输出: