gpt4 book ai didi

json - 如何在单个函数 golang 中解码来自不同文件的两个不同结构?

转载 作者:IT王子 更新时间:2023-10-29 02:26:14 29 4
gpt4 key购买 nike

我想解码两个不同的结构以将数据保存到集合中。但它给出了错误。

下面给出了两个结构,这两个文件位于名为 models 的文件夹中。

用户.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":"puneet@gmail.com",
"password":"poiuytrewq",
"phone_number":"9876543210",
"alt_phone_number":"9876543210",
"gender":"male",
"note":"phase 7"
}

Error:- EOF

我该如何解决这个问题?谁能帮我?谢谢。

最佳答案

问题中的代码不起作用,因为第一个解码器读取了整个请求正文。第二个解码器从 EOF 开始。

解决方法是将正文 slurp 成一个字节 slice ,然后从该 slice 中解码两次:

// 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
}

关于json - 如何在单个函数 golang 中解码来自不同文件的两个不同结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49870446/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com