2017-05-30 28 views
-1

アンマーシャル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) 
    } 
} 

は行くとより多くの経験を持つあなたのいくつかは、この問題を助けることはできますか?

EDIT:提供されたテストが更新された、期待通りに今取り組んでいます。答えを教えてくれてありがとう、Adamさん、ありがとうございました。それは身体にF1が不足しているようにあなたがあなたの例に掲載している:)

答えて

3

JSONに見えますか?

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

それが動作

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

+0

、どうもありがとうございました、ミスターアダム! :)次に、ドキュメンテーションで参照されるこの便利なパターンを使用するために、デコードされるJSONにフィールド名を含める必要があると思われますか?私はより一般的な方法でそれを行うことができますが。 – aicastell

+0

@aicastell、これはすべてのJSONデシリアライザが機能する方法です。具体的な型マッピングへの標準JSONです。 –

+0

これらのすべてがこの推奨パターンを使用しているわけではありません。私はC開発に精通しており、cJSON、ジャスミンおよび他のCベースのデシリアライザを使用した後、 – aicastell