解组 json 引用类型
Unmarshall json reference types
我正在尝试编写一个工作示例来测试 this link 的 "Reference Types" 部分。
但我无法理解这应该如何工作。下面提供了我尝试编写但没有成功的示例,仅供参考:
package main
import (
"fmt"
"log"
"encoding/json"
)
type Foo1 struct {
Val int
}
type Foo2 struct {
Name string
}
type IncomingMsg struct {
F1 *Foo1
F2 *Foo2
}
func main() {
b := []byte(`{"F1" : {"Val":13}}`)
// b := []byte(`{"F2" : {"Name":"Hello"}}`)
var msg IncomingMsg
err := json.Unmarshal(b, &msg)
if err != nil {
log.Fatal(err)
}
if msg.F1 != nil {
fmt.Println(msg.F1.Val)
}
if msg.F2 != nil {
fmt.Println(msg.F2.Name)
}
}
你们中有更多 Go 经验的人可以帮助解决这个问题吗?
编辑:提供的测试已更新,现在按预期工作。谢谢亚当先生提供的答案,它对我理解这个问题有很大帮助! :)
您在示例中发布的 json 正文中似乎缺少 F1
?
https://play.golang.org/p/Fl-lhH2y3X
b := []byte(`{"F1":{"Val":13}}`)
我正在尝试编写一个工作示例来测试 this link 的 "Reference Types" 部分。
但我无法理解这应该如何工作。下面提供了我尝试编写但没有成功的示例,仅供参考:
package main
import (
"fmt"
"log"
"encoding/json"
)
type Foo1 struct {
Val int
}
type Foo2 struct {
Name string
}
type IncomingMsg struct {
F1 *Foo1
F2 *Foo2
}
func main() {
b := []byte(`{"F1" : {"Val":13}}`)
// b := []byte(`{"F2" : {"Name":"Hello"}}`)
var msg IncomingMsg
err := json.Unmarshal(b, &msg)
if err != nil {
log.Fatal(err)
}
if msg.F1 != nil {
fmt.Println(msg.F1.Val)
}
if msg.F2 != nil {
fmt.Println(msg.F2.Name)
}
}
你们中有更多 Go 经验的人可以帮助解决这个问题吗?
编辑:提供的测试已更新,现在按预期工作。谢谢亚当先生提供的答案,它对我理解这个问题有很大帮助! :)
您在示例中发布的 json 正文中似乎缺少 F1
?
https://play.golang.org/p/Fl-lhH2y3X
b := []byte(`{"F1":{"Val":13}}`)