2017-09-10 15 views
0

は、だから私の構造は、次のようになります非整列化_idは文句を言わない仕事

pageReturn.Pagination = resultsList.Pagination 
err = json.Unmarshal(resultsList.Results, &pageReturn.Articles) 

がデータベースから値_idせずにデータを返しますが(私はJSON文字列IDに意味します私はID bson.ObjectId json:"_id" bson:"_id,omitempty"

にID bson.ObjectId json:"id" bson:"_id,omitempty" を変更した場合は

) "" に等しいこと

値(デシベルから実際の_idの値が返されます)

私はこれを避けることができますどのように思ったんだけど(私はまだjson.Unmarshalを使用する必要があります)に

+0

ID bson.ObjectId 'JSON: "_ ID" BSON: "_ ID、omitempty"'? (json: "id"の代わりに "_ id") –

+0

@StephaneMartin記事構造体の定義のように変更しても機能しますが、 "_id"ではなく "id"という文字列を出力する必要があります – Splendid

+0

には、Unmarshalに1つ、Marshalに1つ、異なる2つの構造体タイプが必要です。答えを見てください:) –

答えて

0
  • 非整列化を正常に返されますArticle構造体であるが、タグ付きでjson:"_id"
  • タグでのみ異なる2つの構造体型を相互に変換することができます。したがって、別のArticleBisタイプを作成し、代わりにタグjson:"id"を使用して解決する方法もあります。その後、記事をArticleBisインスタンスに変換します。これをマーシャリングします。

別の簡単な例:

package main 

import "fmt" 
import "encoding/json" 

type Base struct { 
    Firstname string `json:"first"` 
} 

type A struct { 
    Base 
    Lastname string `json:"last"` 
} 

type B struct { 
    Base 
    Lastname string `json:"lastname"` 
} 

func main() { 
    john := A{Base: Base{Firstname: "John"}, Lastname:"Doe"} 
    john1 := B(john) 
    john_json, _ := json.Marshal(john) 
    john1_json, _ := json.Marshal(john1) 
    fmt.Println(string(john_json)) 
    fmt.Println(string(john1_json)) 
} 
関連する問題