在自定义结构标记

时间:2017-10-26 15:38:45

标签: 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)
}

这很棒。但是,如果我更改某个键以包含下划线:

 var jsonBlob = []byte(`{"name": "Quoll", "order_": "Dasyuromorphia"}`)

我希望将其纳入Animal.Order,我正在尝试:

type Animal struct {
    Name  string `json: "name"`
    Order string  `json: "order_"`
}

我很难读到数据。 如何将arbirary键映射到我想要的结构元素? 以下是带有示例的playground链接。

1 个答案:

答案 0 :(得分:7)

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

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