2016-09-30 2 views
1

私が探しているのは、gsonのbsonを直接作成できるので、Document.parse()MongoDBへの書き込みのためのgolangのjson文字列とbson文書をマーシャリングする方法はありますか?

と同じですか?マーシャリング用の中間ゴラン構造体を作成したくありません

+0

あなたはbson.M、bson.D.のようないくつかの中間のマーシャル/アンマーシャルのための構造体(高レベルのインターフェイス)、または直接BSON、または低レベルを使用するか選択することができますhttp://stackoverflow.com/questions/25518297/golang-bson-conversion – lofcek

答えて

5

gopkg.in/mgo.v2/bsonパッケージには、あなたが欲しいものを正確に実行するUnmarshalJSONという機能があります。

パラメータdataは、JSON文字列を[]byte値として保持する必要があります。

func UnmarshalJSON(data []byte, value interface{}) error 

UnmarshalJSONはBSONの拡張JSON仕様で定義されたような非標準の構文を保持することができるJSON値をアンマーシャル。

例:

var bdoc interface{} 
err = bson.UnmarshalJSON([]byte(`{"id": 1,"name": "A green door","price": 12.50,"tags": ["home", "green"]}`),&bdoc) 
if err != nil { 
    panic(err) 
} 
err = c.Insert(&bdoc) 

if err != nil { 
    panic(err) 
} 
+0

第2パラメータの値はどうでしょうか、ドキュメントはどんなタイプにする必要があるかを詳しく説明していないようですね。から、私の理解は、インタフェース{} Cのvoid *またはJavaのオブジェクトに相当しますか? unmarshalJSONの例へのポインタはさらに良いでしょう – Ganesh

+0

void *とインタフェース{}の間に大きな違いがあります。 variableがvoid *の場合、変数の型を見つける方法はありません。 interface {}は型を知っています。 – lofcek

+0

ありがとう、この答えは私の問題を解決します。 – Kingname

関連する問題