我想对两种不同的结构进行解码,以将数据保存到集合中。但它给出了错误。
在这两个文件的下面给出了两个结构,这些文件位于名为models的文件夹中。
User.go
type User struct {
Id int `json:"id" bson:"_id,omitempty"`
FirstName string `json:"first_name,omitempty" bson:"first_name,omitempty"`
LastName string `json:"last_name,omitempty" bson:"last_name,omitempty"`
EmailId string `json:"email_id,omitempty" bson:"email_id,omitempty"`
Password string `json:"password,omitempty" bson:"password,omitempty"`
PhoneNumber string `json:"phone_number,omitempty" bson:"phone_number,omitempty"`
AltPhoneNumber string `json:"alt_phone_number" bson:"alt_phone_number"`
Gender string `json:"gender,omitempty" bson:"gender,omitempty"`
Note string `json:"note,omitempty" bson:"note,omitempty"`
}
Provider.go
type Provider struct {
Id int `json:"id" bson:"_id,omitempty"`
Uid int `json:"uid" bson:"uid,omitempty"`
Speed string `json:"speed,omitempty" bson:"speed,omitempty"`
ProviderCategory string `json:"provider_category,omitempty" bson:"provider_category,omitempty"`
Priority int `json:"priority,omitempty" bson:"priority,omitempty"`
}
我试图将其解码的代码
import (
"encoding/json"
"go-training/models"
"github.com/gin-gonic/gin"
"fmt"
)
var provider models.Provider
var user models.User
func SaveProvider(c *gin.Context) {
response := ResponseController{}
//decode the struct
providerErr := json.NewDecoder(c.Request.Body).Decode(&provider)
fmt.Println(providerErr) //Output:- nil
userErr := json.NewDecoder(c.Request.Body).Decode(&user)
fmt.Println(userErr) //output:- EOF
if userErr != nil {
fmt.Println("data is not properly formatted")
}
if providerErr != nil {
fmt.Printl?("data is not properly formatted")
}
}
以json格式输入的数据-
{
"Id":1,
"Uid":1,
"speed":"new",
"provider_category":"WL",
"priority":1,
"first_name":"puneet",
"last_name":"jindal",
"email_id":"[email protected]",
"password":"poiuytrewq",
"phone_number":"9876543210",
"alt_phone_number":"9876543210",
"gender":"male",
"note":"phase 7"
}
错误:-EOF
我怎么解决这个问题?谁能帮我?谢谢。
问题中的代码不起作用,因为第一个解码器读取了整个请求正文。第二个解码器从EOF开始。
解决方法是将主体吸附到一个字节片中,然后从该片中解组两次:
// slurp up the body. p is a []byte
p, err := ioutil.ReadAll(c.Request.Body)
if err != nil {
// handler error
}
var provider models.Provider
if err := json.Unmarshal(p, &provider); err != nil {
// handle error
}
var user models.User
if err := json.Unmarshal(p, &user); err != nil {
// handle error
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句