密钥名称不能包含空格的JSON无法解组

我得到的一些JSON数据的键名中有空格。我正在使用标准encoding/json库来解组数据。但是,它无法理解模式中带空格的键。例如下面的代码:

package main

import (

"encoding/json"

"fmt"

)

func main() {

var jsonBlob = []byte(`[

{"Na me": "Platypus", "Order": "Monotremata"},

{"Na me": "Quoll", "Order": "Dasyuromorphia"}

]`)

type Animal struct {

Name string `json: "Na me"`

Order string `json: "Order,omitempty"`

}

var animals []Animal

err := json.Unmarshal(jsonBlob, &animals)

if err != nil {

fmt.Println("error:", err)

}

fmt.Printf("%+v", animals)

}

输出为:

[{Name: Order:Monotremata} {Name: Order:Dasyuromorphia}]

因此,在架构中,库删除了空格(从 删除),并尝试找到显然不存在的键( )。有什么建议可以在这里做什么?

回答:

您的json 标签规范不正确,这就是为什么encoding/json库默认使用字段名称的原因Name。但由于没有带"Name"key的JSON字段,因此Animal.Name将保持其零值(即空字符串"")。

取消编组Order将仍然有效,因为json如果json缺少标签说明(小写和大写尝试),程序包将使用字段名称。由于字段名称与JSON密钥相同,因此无需额外的JSON标签映射即可使用。

标签规范中的冒号后面和引号之前不能有空格:

type Animal struct {

Name string `json:"Na me"`

Order string `json:"Order,omitempty"`

}

通过这个简单的更改,它可以工作(在GoPlayground上尝试):

[{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]

以上是 密钥名称不能包含空格的JSON无法解组 的全部内容, 来源链接: utcz.com/qa/412394.html

回到顶部