使用原生方法,简单地进行json转struct。
一、代码实现
(1)首先你需要引入encoding/json包
你需要idea帮你自动引入。
(2)直接上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
package main import ( "encoding/json" "fmt" ) func main() { input := ` { "Mysql":{ "Host":"127.0.0.1", "Port":"3306", "User":"root", "Passwd":"", "Db":"mob_portal" }, "HashKey":"lsidieieisi", "Test":100 } ` var info struct { Mysql struct { Host, Port, User, Passwd, Db string } HashKey string Test int } err := json.Unmarshal([]byte(input), &info) if err != nil { fmt.Println(err.Error()) return } fmt.Println(info.Test) jsonresult, err := json.Marshal(info) if err != nil { fmt.Println(err.Error()) return } fmt.Println(string(jsonresult)) } |
实现效果:
1 2 |
100 {"Mysql":{"Host":"127.0.0.1","Port":"3306","User":"root","Passwd":"","Db":"mob_portal"},"HashKey":"lsidieieisi","Test":100} |
(2)要注意的地方
我们首先定义了与json数据对应的结构体,数组对应Mysql,字段名对应json里面的key,在解析的时候,如何将json数据与struct字段相匹配呢?
例如JSON的key是Test,那么怎么找对应的字段呢?
- 首先查找tag含有Test的可导出的struct字段(首字母大写)。
- 其次查找字段名是Test的导出字段。
- 最后查找类似Test或者TesT的除了首字母之外其他大小写不敏感的导出字段。
能够被赋值的字段必须是可导出字段(即首字母大写才可达)。
同时JSON解析的时候只会解析能找得到的字段,如果找不到的字段会被忽略,这样的一个好处是:当你接收到一个很大的JSON数据结构而你却只想获取其中的部分数据的时候,你只需将你想要的数据对应的字段名大写,即可轻松解决这个问题。
二、总结
字段要可达!记住首字母大写!