[英]Handling Null JSON Array in Go using struct
在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": []
}
nil
切片值被編組為 JSON null
值。 這記錄在json.Marshal()
:
數組和切片值編碼為 JSON 數組,除了 []byte 編碼為 base64 編碼字符串,而nil 切片編碼為空 JSON 值。
非nil
空切片被編組為空 JSON 數組。 因此,只需將Policies.Policies
初始化為一個空切片,它將在輸出中為[]
:
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":[]}}
在數組中,“空”條目的含義很明確:這意味着缺少此數組條目。
在對象又名字典中,有不同的方式來表示“沒有條目”:鍵可能不存在。 或者鍵可能不存在,但有一個空數組作為值。 或者密鑰可能在那里,但具有“空”值。
您確實需要在數據提供者和處理它的客戶之間達成一致,這些都是什么意思。 而且由於通常很難改變數據提供者所做的事情,因此將您獲得的內容轉化為您需要的內容。
因此,您必須決定如果“policies”不作為鍵存在,或者它作為空值存在,這意味着什么。 我見過一些軟件不會產生一個元素的數組,而是提供單個元素。 所以 "policies": { "amount": ..., "daysBeforeCheckin": ... } 也是可能的。 您決定接受什么,將什么視為數組,以及如何從獲得的形式更改為所需的形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.