在 golang 中解组 json 数组
Unmarshalling a json array in golang
我有一个关于 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)
}
这不会奏效。 json 中的内容是一个 PublicKey
类型的数组。 KeysResponse
类型将用于 json 看起来像这样;
{
"Collection": [{"id": 1,"key": "-"},{"id": 2,"key": "-"},{"id": 3,"key": "-"}]
}
这不是你拥有的。如果您希望数据以该类型存储,我建议如下; response := KeysResponse{keys}
在你解编成 keys
之后的线上。
详细说明这种区别。在工作案例中,json 只是一个包含对象的数组。我上面写的 json 是一个对象,它有一个名为 Collection
的单个 属性 ,它是数组类型,数组中的对象由 PublicKey
类型表示(对象带有一个名为 id 的 int 和一个名为 key 的字符串)。在编写解组 json 的代码时,使用像这样的简单英语来描述结构很有帮助,它会准确地告诉您 Go 中需要什么 types/structures 来保存数据。
我有一个关于 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)
}
这不会奏效。 json 中的内容是一个 PublicKey
类型的数组。 KeysResponse
类型将用于 json 看起来像这样;
{
"Collection": [{"id": 1,"key": "-"},{"id": 2,"key": "-"},{"id": 3,"key": "-"}]
}
这不是你拥有的。如果您希望数据以该类型存储,我建议如下; response := KeysResponse{keys}
在你解编成 keys
之后的线上。
详细说明这种区别。在工作案例中,json 只是一个包含对象的数组。我上面写的 json 是一个对象,它有一个名为 Collection
的单个 属性 ,它是数组类型,数组中的对象由 PublicKey
类型表示(对象带有一个名为 id 的 int 和一个名为 key 的字符串)。在编写解组 json 的代码时,使用像这样的简单英语来描述结构很有帮助,它会准确地告诉您 Go 中需要什么 types/structures 来保存数据。