簡體   English   中英

密鑰名稱不能包含空格的JSON無法解組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM