我是Golang的新手,我面临着将数据保存到数据库的问题.在从API接收到JSON对象后,我试图将其存储在MongoDB中,但数据被保存为空值.
下面是我的代码和 struct :
var current:={
"usd": {
"code": "USD",
"alphaCode": "USD",
"numericCode": "840",
"name": "U.S. Dollar",
"rate": 0.68135437808647,
"date": "Sun, 31 Dec 2023 11:55:01 GMT",
"inverseRate": 1.4676650391657
},
"eur": {
"code": "EUR",
"alphaCode": "EUR",
"numericCode": "978",
"name": "Euro",
"rate": 0.61624276207684,
"date": "Sun, 31 Dec 2023 11:55:01 GMT",
"inverseRate": 1.6227371119619
},
"gbp": {
"code": "GBP",
"alphaCode": "GBP",
"numericCode": "826",
"name": "U.K. Pound Sterling",
"rate": 0.53541690218052,
"date": "Sun, 31 Dec 2023 11:55:01 GMT",
"inverseRate": 1.8677034586085
}
}
这是我的模特.go 吧
type Currency struct {
Code string `json:"code"`
AlphaCode string `json:"alphaCode"`
NumericCode string `json:"numericCode"`
Name string `json:"name"`
Rate float64 `json:"rate"`
Date string `json:"date"`
InverseRate float64 `json:"inverseRate"`
}
type Rate struct {
ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
Currency `json:"currency"`
Timestamp primitive.DateTime `json:"timestamp"`
}
我try 将数据保存到数据库,但我只写入默认值,其中包含空字符串和0
const apiUrl = "https://www.floatrates.com/daily/aud.json"
func GetRatesFromAPI() (map[string]models.Rate, error) {
response, err := http.Get(apiUrl)
fmt.Print(response)
if err != nil {
return nil, err
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return nil, err
}
var data map[string]models.Rate
if err := json.Unmarshal(body, &data); err != nil {
return nil, err
}
fmt.Print(data)
return data, nil
}
r.GET("/get", func(c *gin.Context) {
mongo.ConnectDB()
rates, err := src.GetRatesFromAPI()
fmt.Print(rates)
if err != nil {
log.Fatal(err)
}
for _, rate := range rates {
mongo.InsertRate(rate)
}
c.String(http.StatusOK, "get rates")
})
func InsertRate(rate models.Rate) {
rate.Timestamp = primitive.NewDateTimeFromTime(time.Now())
collection := client.Database("mongodb").Collection("rates")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
result, err := collection.InsertOne(ctx, rate)
if err != nil {
log.Fatal(err)
}
log.Println("Inserted rate with ID:", result.InsertedID)
}
我在DB中获取这个对象时没有任何值,我试图找出为什么数据没有正确存储在MongoDB中.如有任何帮助或建议,我们将不胜感激!
[
{
"_id": {"$oid": "659177abefa699e213158c16"},
"currency": {
"code": "",
"alphacode": "",
"numericcode": "",
"name": "",
"rate": 0,
"date": "",
"inverserate": 0
},
"timestamp": {"$date": "2023-12-31T14:16:11.800Z"}
}
]