apaas.dev
7 November 2022
这些是为客户端和服务器端编码/解码 json 的代码示例。
让我们从服务器端开始。
解码请求
定义请求参数:首先,定义表示请求参数的结构。
type UserRequest struct { Name string `json:"name"` Email string `json:"email"` }
json.Decoder:在请求处理程序中,用请求体创建一个解码器,并用结构体的指针调用解码方法。
func handler(w http.ResponseWriter, r *http.Request) { var req UserRequest err := json.NewDecoder(r.Body).Decode(&req) if err != nil { http.Error(w, err.Error(), 400) return } // process with the request parameters }
编码响应
定义响应结构:同样,您将定义响应结构。
type UserResponse struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` }
json.Encoder:在请求处理程序中,使用 ResponseWriter 创建编码器,并使用响应实例调用 encode 方法。
func handler(w http.ResponseWriter, r *http.Request) { ... resp := UserResponse{ ID: 123, Name: req.Name, Email: req.Email, } err := json.NewEncoder(w).Encode(resp) if err != nil { http.Error(w, err.Error(), 500) return } }
现在我们转到客户端。
编码请求
定义请求结构:同样,我们从定义请求结构开始。
type UserRequest struct { Name string `json:"name"` Email string `json:"email"` }
json.Encoder:使用 bytes.Buffer 作为空间来写出 json 字符串。
func PostUser(url string, user UserRequest) (*UserResponse, error) { b := new(bytes.Buffer) err := json.NewEncoder(b).Encode(user) if err != nil { return nil, err } resp, err := http.Post(url, "application/json", b) if err != nil { return nil, err } // decode response }
解码响应
定义响应结构:与上一个几乎相同:)
type UserResponse struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` }
json.Decoder:用响应体创建一个解码器,用结构体调用decode返回。
func PostUser(url string, user UserRequest) (*UserResponse, error) { ... var userResp *UserResponse err = json.NewDecoder(resp.Body).Decode(userResp) if err != nil { return nil, err } return userResp, nil }
- 登录 发表评论