当对象具有结构对象的嵌套数组时,我遇到了将字符串编组回结构对象的问题。我使用以下代码作为针对我的问题的演示:
json字符串是
const myStr = `{
"name": "test_session1",
"shared_items:": [
{
"id": 0,
"name": ".aspnet"
},
{
"id": 1,
"name": ".bash_profile"
}
]
}`
我有以下两个结构,其中Session是父级,而SharedItem是关联的子级。
type Session struct {
ID uint64 `json:"id"`
Name string `json:"name,omitempty"`
SharedItems []SharedItem `json:"shared_items"`
}
type SharedItem struct {
ID uint64 `json:"id"`
Name string `json:"name"`
}
我尝试了以下操作以解组json字符串,但看起来好像缺少了SharedItem对象的嵌套数组,因为我看到sess对象具有0个共享项,这不是我期望的。
func main() {
var sess Session
if err := json.Unmarshal([]byte(myStr), &sess); err != nil {
panic(err)
}
fmt.Printf("sess name is: %s, and has %d shared items\n", sess.Name, len(sess.SharedItems)) // printed: sess name is test_session1, and has 0 shared items
}
这是我去游乐场的链接:https : //play.golang.org/p/a-y5T3tut6g
JSON解组的Golang Spec全面描述了这一切
为了将JSON解组到结构中,Unmarshal将传入的对象密钥与Marshal使用的密钥(结构字段名称或其标记)进行匹配,希望使用精确匹配,但还要接受不区分大小写的匹配。默认情况下,没有相应结构字段的对象键将被忽略(有关替代方法,请参见Decoder.DisallowUnknownFields)。
在提供的json中,共享项的json对象中包含:
冒号,因为我们看到它shared_items:
不是shared_items
我们的json标签
"shared_items:": [
{
"id": 0,
"name": ".aspnet"
},
{
"id": 1,
"name": ".bash_profile"
}
]
删除:
或追加到您的struct json标签以匹配相同的标签。
package main
import (
"fmt"
"encoding/json"
)
type Session struct {
Name string `json:"name,omitempty"`
SharedItems []SharedItem `json:"shared_items"`
}
type SharedItem struct {
ID uint64 `json:"id"`
Name string `json:"name"`
}
const myStr = `{"name":"test_session1","shared_items":[{"id":0,"name":".aspnet"},{"id":1,"name":".bash_profile"}]}`
func main() {
var sess Session
if err := json.Unmarshal([]byte(myStr), &sess); err != nil {
panic(err)
}
fmt.Println(sess)
fmt.Printf("sess name is: %s, and has %d shared items\n", sess.Name, len(sess.SharedItems))
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句