解组json引用类型

时间:2017-05-30 07:48:45

标签: json go unmarshalling

我正在尝试编写一个工作示例来测试this link的“参考类型”部分。

但我无法理解这应该如何运作。下面提供了我试图写的没有成功的例子,仅供参考:

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经验可以帮助解决这个问题吗?

编辑:提供的测试已更新,现在正按预期工作。感谢Adam先生提供的答案,它帮助我理解了这个问题! :)

1 个答案:

答案 0 :(得分:3)

您在示例中发布的json看起来在正文中缺少F1

https://play.golang.org/p/Fl-lhH2y3X

b := []byte(`{"F1":{"Val":13}}`)