json - 在 golang 中解码一个 json 数组

标签 json encoding go unmarshalling

我有一个关于 golang 解码的问题。我试图解码 Json 数组,但它在一个解码中给出 nil 结果,而在另一个解码中成功。我不明白背后的原因。这是代码中的错误还是预期的?

package main

import "fmt"
import "encoding/json"

type PublicKey struct {
    Id int
    Key string
}

type KeysResponse struct {
    Collection []PublicKey
}

func main() {
    keysBody := []byte(`[{"id": 1,"key": "-"},{"id": 2,"key": "-"},{"id": 3,"key": "-"}]`)
    keys := make([]PublicKey,0)

    json.Unmarshal(keysBody, &keys)//This works
    fmt.Printf("%#v\n", keys)
    response := KeysResponse{}
    json.Unmarshal(keysBody, &response)//This doesn't work
    fmt.Printf("%#v\n", response)

}

http://play.golang.org/p/L9xDG26M8-

最佳答案

这预计不会奏效。您在 json 中拥有的是 PublicKey 类型的数组。 KeysResponse 类型将用于 json,如下所示;

{
   "Collection": [{"id": 1,"key": "-"},{"id": 2,"key": "-"},{"id": 3,"key": "-"}]
}

这不是你所拥有的。如果您希望数据以该类型存储,我建议如下; response := KeysResponse{keys} 在你解码为 keys 之后。

详细说明这种区别。在工作案例中,json 只是一个包含对象的数组。我上面写的 json 是一个对象,它有一个名为 Collection 的属性,它是数组类型,数组中的对象由 PublicKey 类型表示(具有int 称为 id 和一个称为 key 的字符串)。在编写解码 json 的代码时,像这样使用简单的英语来描述结构会很有帮助,它会准确地告诉您 Go 中需要哪些类型/结构来保存数据。

关于json - 在 golang 中解码一个 json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032150/

相关文章:

c# - 从我发送的 post 请求中读取我的 json 响应

ajax - 如何从 JQuery getJSON 回调中获取数据

JSON 到 Map[String,JsObject] 与 Play 2.0?

java - 哪些库可用于将对象表示形式转换为表示层中的 JSON/XML?

javascript - 下载 XML 源时处理多种编码方案

Python 3 设置默认字节编码

go - gvm 在 ubuntu 14.04 中设置 GOPATH

mongodb - 监视 MongoDB 更改流

swift - URL 构造函数不适用于某些字符

select - 当涉及多个 channel 时,select 如何工作?