一·与结构体类型互转
1.decode
encoding/json包下函数Unmarshal可以将json解码为struct
Unmashal时,会自动匹配对应的变量名进行赋值,大小写不敏感(前提是struct中的变量首字母大写)
struct中变量首字母一定要大写!!!!!!!!!!!!!
func Unmarshal(data []byte, v interface{}) error
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Message string
Username string
}
func main() {
var user User
str := `{"message":"success","username":"Michael Jiang"}`
json.Unmarshal([]byte(str), &user)
fmt.Println(user)
}
2·encode
Mashal时,结构体的成员变量名将会直接作为JSON Object的key打包成JSON(前提是struct中的变量首字母大写)
注意有error可能
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Message string
Username string
}
func main() {
var user = User{"ok", "Lijie"}
j, _ := json.Marshal(&user)
fmt.Println(string(j))
}
二.与map之间互转
只要将 v interface{} 换成map类型即可
// main
package main
import (
"encoding/json"
"fmt"
)
func decode() {
var mp map[string]string
mp = make(map[string]string)
str := `{"message":"success","username":"Michael Jiang"}`
json.Unmarshal([]byte(str), &mp)
fmt.Println(mp)
fmt.Println(mp["username"])
fmt.Println(mp["message"])
}
func encode() {
var mp map[string]string
mp = make(map[string]string)
mp["message"] = "success"
mp["username"] = "Michael Jiang"
j, _ := json.Marshal(mp)
fmt.Println(string(j))
}
func main() {
encode()
decode()
}
注意:map需要先定义,再make 最后使用!
至于JSON和其他类型的转换与上述过程大同小异,这里就不演示了。