Golang 语言操作 JSON
使用 encoding/json
package main
import (
"encoding/json"
"fmt"
)
// User ...
type User struct {
Email string `json:"email"`
Password string `json:"password"`
}
func main() {
buf, _ := json.Marshal(User{
Email: "xxxx@example.com",
Password: "123456",
})
fmt.Printf("%#v\n", buf)
// 解析
user := User{}
json.Unmarshal([]byte(`{
"email": "xxx@example.com",
"password": "123456"
}`), &user)
fmt.Printf("%#v\n", user)
}
如果你需要对自定义结构体 Marshal
和Unmarshal
来到达特殊解析的逻辑
- 自定义
Marshal
只需要自定义 MarshalJSON
- 自定义
Unmarshal
只需要自定义 UnmarshalJSON
package main
import (
"encoding/json"
"fmt"
)
// User ...
type User struct {
Email string `json:"email"`
Password string `json:"password"`
}
func main() {
buf, _ := json.Marshal(User{
Email: "xxxx@example.com",
Password: "123456",
})
fmt.Printf("%#v\n", buf)
// 解析
user := User{}
json.Unmarshal([]byte(`{
"email": "xxx@example.com",
"password": "123456"
}`), &user)
fmt.Printf("%#v\n", user)
}
// MarshalJSON ...
func (u User) MarshalJSON() (b []byte, err error) {
fmt.Printf("%s\n", u.Email)
fmt.Print("MarshalJSON\n")
return
}
// UnmarshalJSON ...
func (u User) UnmarshalJSON(b []byte) (err error) {
fmt.Printf("u.Email%s\n", u.Email)
fmt.Printf("b is %s\n", b)
fmt.Print("UnmarshalJSON\n")
return
}
最后
- 其实这一篇就够了:
https://colobu.com/2017/06/21/json-tricks-in-Go/