我试图在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)
}
Run Code Online (Sandbox Code Playgroud)
这运行得非常好.但是,如果我更改某个键以包含下划线:
var jsonBlob = []byte(`{"name": "Quoll", "order_": "Dasyuromorphia"}`)
Run Code Online (Sandbox Code Playgroud)
我希望将其纳入Animal.Order,我正在尝试:
type Animal struct {
Name string `json: "name"`
Order string `json: "order_"`
}
Run Code Online (Sandbox Code Playgroud)
我很难读到数据.如何将arbirary键映射到我想要的结构元素?这是一个带有示例的操场的链接.
它与下划线无关.在struct标签中,冒号和引号之间不能有空格,例如json:"name".在第一个(工作)示例中,json标签仍然被忽略; 只是自动逻辑与字段名称一起使用.如果删除struct标记中冒号后面的空格,则它会按照预期的方式使用后一个示例.
请参阅此处的工作示例:https://play.golang.com/p/QXdlVsi166