我得到的一些 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}]
所以在架构中,库删除了空格(来自 Name)并尝试找到显然不存在的键(Name)。有什么建议我可以在这里做什么?
最佳答案
你的 json
tag specification不正确,这就是为什么 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}]
关于json - 无法使用带有空格的键名解码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44629731/