2017-09-22 5 views
4

void値と未指定のフィールド値を区別できるかどうかを知りたいと思います。ここでGoでの非マーシャリング時のvoid値と未指定フィールドの認識方法?

例です。

var jsonBlob = []byte(`[ 
    {"Name": "A", "Description": "Monotremata"}, 
    {"Name": "B"}, 
    {"Name": "C", "Description": ""} 
]`) 

type Category struct { 
    Name string 
    Description string 
} 

var categories []Category 
err := json.Unmarshal(jsonBlob, &categories) 

if err != nil { 
    fmt.Println("error:", err) 
} 
fmt.Printf("%+v", categories) 

も利用できるここに:https://play.golang.org/p/NKObQB5j4O

出力:

[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}] 

は、したがって、この例では、カテゴリから説明を区別することが可能ですカテゴリCからのB?

私は、プログラム内でそれぞれの動作が異なるように区別したいと考えています。

+0

はゴーやJSONどちらも簡単に修正した "無効値" – Flimzy

答えて

4

フィールドの型をポインタに変更すると、空の値と不足する値を区別できます。値が空の文字列値でJSONに存在する場合は、空の文字列を指すポインタに設定されます。 JSONに存在しない場合は、nilとなります。

type Category struct { 
    Name  string 
    Description *string 
} 

出力(Go Playground上でそれを試してみてください):

[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}] 
+0

の概念を持っています!ありがとう! (6分で回答を受け入れることができます) – kenfire

+0

違いを示す別の例を次に示します:https://play.golang.org/p/3tU6paM9Do – kenfire

関連する問題