Can';t使用带有空格的键名对JSON进行解组
我得到的一些JSON数据在键名中有空格。我使用标准Can';t使用带有空格的键名对JSON进行解组,json,go,struct,Json,Go,Struct,我得到的一些JSON数据在键名中有空格。我使用标准编码/json库来解组数据。但是,它无法理解模式中带有空格的键。例如,以下代码: package main import ( "encoding/json" "fmt" ) func main() { var jsonBlob = []byte(`[ {"Na me": "Platypus", "Order": "Monotremata"}, {"Na me": "Quoll",
编码/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
不正确,这就是为什么库默认为字段名,即name
。但是,由于没有带有“Name”
键的JSON字段,Animal.Name
将保持其零值(即空字符串“
)
如果缺少json
标记规范(尝试使用小写和大写),则对Order
进行解组仍然有效,因为json
包将使用字段名。由于字段名与JSON键相同,因此它不需要额外的JSON标记映射
在标记规范中,冒号之后和引号之前不能有空格:
type Animal struct {
Name string `json:"Na me"`
Order string `json:"Order,omitempty"`
}
通过这一简单的更改,它可以正常工作(请在以下网站上试用):
哎哟,问题解决了。谢谢。不过我还是不完全明白。为什么顺序键在这种情况下工作……啊,明白了,这里的顺序键名称与schemaJust相同,以便在错误指定结构(实际上只是标记)的情况下更清楚地说明这一点json和属性名之间有空格,它完全忽略标记规范,因为它在“json:”(无效)后包含空格,并尝试直接映射字段名。因此它只适用于“Order”,而不适用于“Na me”(即使我们将Order标记更改为任何垃圾值,例如将该行更改为:Order string
json:“ABCD,省略Empty”
它仍然可以工作)
[{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]