在密钥中用下划线解组Json

adr*_*ino 3 json go

我试图在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键映射到我想要的结构元素?这是一个带有示例的操场的链接.

Adr*_*ian 7

它与下划线无关.在struct标签中,冒号和引号之间不能有空格,例如json:"name".在第一个(工作)示例中,json标签仍然被忽略; 只是自动逻辑与字段名称一起使用.如果删除struct标记中冒号后面的空格,则它会按照预期的方式使用后一个示例.

请参阅此处的工作示例:https://play.golang.com/p/QXdlVsi166