[英]Can't unmarshall JSON with key names having spaces
我得到的一些JSON數據的鍵名中有空格。 我正在使用標准的encoding/json
庫來解組數據。 但是,它無法理解模式中帶空格的鍵。 例如下面的代碼:
package main
import (
"encoding/json"
"fmt"
)
func main() {
var jsonBlob = []byte(`[
{"Na me": "Platypus", "Order": "Monotremata"},
{"Na me": "Quoll", "Order": "Dasyuromorphia"}
]`)
type Animal struct {
Name string `json: "Na me"`
Order string `json: "Order,omitempty"`
}
var animals []Animal
err := json.Unmarshal(jsonBlob, &animals)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", animals)
}
輸出為:
[{Name: Order:Monotremata} {Name: Order:Dasyuromorphia}]
因此,在架構中,庫刪除了空格(從Na me中刪除)並嘗試查找鍵( Name ),該鍵顯然不存在。 有什么建議可以在這里做什么?
您的json
標記規范不正確,這就是為什么encoding/json
庫默認使用字段名稱Name
。 但是,由於沒有帶有"Name"
鍵的JSON字段,因此Animal.Name
將保持其零值(即空字符串""
)。
取消編組Order
仍然有效,因為如果缺少json
標簽規范(小寫和大寫均會嘗試),則json
包將使用字段名稱。 由於字段名稱與JSON密鑰相同,因此無需額外的JSON標簽映射即可使用。
標簽規范中的冒號后面和引號之前不能有空格:
type Animal struct {
Name string `json:"Na me"`
Order string `json:"Order,omitempty"`
}
通過這個簡單的更改,它可以工作(在Go Playground上嘗試) :
[{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.