我试图在Golang中解组数据,当Json对象的某个键中有一个下划线(_
)时,我发现了一个奇怪的行为。
举个例子:
package main
import (
"encoding/json"
"fmt"
)
func main() {
var jsonBlob = []byte(`{"name": "Quoll", "order": "Dasyuromorphia"}`)
type Animal struct {
Name string `json: "name"`
Order string `json: "order"`
}
var animal Animal
err := json.Unmarshal(jsonBlob, &animal)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", animal)
}
这很棒。但是,如果我更改某个键以包含下划线:
var jsonBlob = []byte(`{"name": "Quoll", "order_": "Dasyuromorphia"}`)
我希望将其纳入Animal.Order
,我正在尝试:
type Animal struct {
Name string `json: "name"`
Order string `json: "order_"`
}
我很难读到数据。 如何将arbirary键映射到我想要的结构元素? 以下是带有示例的playground链接。
答案 0 :(得分:7)
它与下划线无关。在结构标记中,您不能在冒号和引号之间留出空格,例如json:"name"
。在第一个(工作)示例中,json
标记仍被忽略;只是自动逻辑与字段名称一起使用。如果删除struct标记中冒号后面的空格,则它会按照预期的方式使用后一个示例。
请参阅此处的工作示例:https://play.golang.com/p/QXdlVsi166