Unmarshall json引用类型
问题描述:
我正试图编写一个工作示例来测试this link的“引用类型”部分。Unmarshall json引用类型
但我无法理解这应该如何工作。我尝试没有成功写的例子提供如下,仅供参考:
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)
}
}
可以将部分你一起去更多的经验,帮助解决这个问题?
编辑:提供的测试已更新,现在按预期工作。谢谢Adam先生提供的答案,它帮助我理解了这个问题! :)
它的工作原理,非常感谢你,亚当先生! :)然后,假设你需要在被解码的JSON中包含字段名称以使用文档中引用的这种有用模式?我虽然可以用更通用的方式来做到这一点。 – aicastell
@aicastell,这是所有JSON解串器的工作原理。这只是标准的具体类型映射JSON –
并非所有人都使用这种建议模式,我熟悉C开发,并且在使用cJSON,茉莉花和其他基于C的反序列化器之后,此功能对我来说是全新的。 – aicastell