在自定义结构标记中解析带有空格的Json

4
我正在尝试在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_"`
}

我很不幸地无法读取数据。 我该如何将任意键映射到我结构体中想要的元素? 这里是带有示例的游乐场链接。

1个回答

8
这与下划线无关。在结构体标签中,冒号和引号之间不能有空格,例如json:"name"。在第一个(有效的)示例中,json标记仍然被忽略;只是自动逻辑与字段名称配合工作。如果您删除结构体标记中冒号后面的空格,则可以像后面的示例一样正常工作。
请查看有效示例:https://play.golang.com/p/QXdlVsi166

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接