在golang中追加結構后,我們有結構并獲得空值。使用我在 golang 中的部分代碼找到下面的結構。
type XmloutRoomRate struct {
CancellationPolicy Policies `bson:"cancellationPolicy" json:"cancellationPolicy"`
}
type Policies struct {
Policies []RoomPolicies `bson:"policies" json:"policies"`
}
type RoomPolicies struct {
Amount float64 `bson:"amount" json:"amount"`
DaysBeforeCheckIn int `bson:"daysBeforeCheckIn" json:"daysBeforeCheckIn"`
}
cancelPolicyMain := Policies{}
cancelPolicy := RoomPolicies{}
if cancelAmount < 0 {
cancelPolicy.Amount = cancelAmount
cancelPolicy.DaysBeforeCheckIn = cancelDay
cancelPolicyMain.Policies = append(cancelPolicyMain.Policies, cancelPolicy)
}else{
cancelPolicyMain = agodaPolicies{}
cancelPolicyMain.Policies = append(cancelPolicyMain.Policies)
}
當資料出現時獲得正確的資料結構。
"cancellationPolicy": {
"policies": [
{
"amount": 5141.58,
"daysBeforeCheckIn": 5
}
]
}
但是當資料不可用時,獲取具有空值的結構。
"cancellationPolicy": {
"policies": null
}
我們需要帶有空白陣列 [] 的實際輸出。
"cancellationPolicy": {
"policies": []
}
uj5u.com熱心網友回復:
nil切片值被編組為 JSONnull值。這是記錄在json.Marshal():
陣列和切片值編碼為 JSON 陣列,除了 []byte 編碼為 base64 編碼字串,而nil 切片編碼為空 JSON 值。
非nil空切片被編組為空的 JSON 陣列。所以簡單地初始化Policies.Policies為一個非nil空切片,它將[]在輸出中:
cancelPolicyMain = Policies{Policies: []RoomPolicies{}}
測驗代碼:
const cancelDay = 1
for cancelAmount := -500.0; cancelAmount <= 501; cancelAmount = 1000 {
cancelPolicyMain := Policies{}
cancelPolicy := RoomPolicies{}
if cancelAmount < 0 {
cancelPolicy.Amount = cancelAmount
cancelPolicy.DaysBeforeCheckIn = cancelDay
cancelPolicyMain.Policies = append(cancelPolicyMain.Policies, cancelPolicy)
} else {
cancelPolicyMain = Policies{Policies: []RoomPolicies{}}
cancelPolicyMain.Policies = append(cancelPolicyMain.Policies)
}
x := XmloutRoomRate{cancelPolicyMain}
if err := json.NewEncoder(os.Stdout).Encode(x); err != nil {
panic(err)
}
}
輸出(在Go Playground上試試):
{"cancellationPolicy":{"policies":[{"amount":-500,"daysBeforeCheckIn":1}]}}
{"cancellationPolicy":{"policies":[]}}
uj5u.com熱心網友回復:
在陣列中,“空”條目的含義很明確:這意味著缺少此陣列條目。
在物件又名字典中,有不同的方式來表示“沒有條目”:鍵可能不存在。或者鍵可能不存在,但有一個空陣列作為值。或者密鑰可能在那里,但具有“空”值。
您確實需要在資料提供者和處理它的客戶之間達成一致,這些都是什么意思。而且由于通常很難改變資料提供者所做的事情,因此請將您獲得的內容轉化為您需要的內容。
因此,您必須決定如果“policies”不作為鍵存在,或者它作為空值存在,這意味著什么。我見過一些軟體不會產生一個元素的陣列,而是提供單個元素。所以 "policies": { "amount": ..., "daysBeforeCheckin": ... } 也是可能的。您決定接受什么,將什么視為陣列,以及如何從獲得的形式更改為所需的形式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/331440.html
