Sau một số nghiên cứu, tôi đã tìm thấy mejson thư viện, tuy nhiên nó chỉ dành cho Marshaling, vì vậy tôi quyết định viết Unmarshaller.
Kìa ejson
(Tôi đã viết nó), ngay bây giờ nó là một ejson
rất đơn giản -> bson
trình chuyển đổi, không có bson
-> ejson
tuy nhiên, bạn có thể sử dụng mejson
cho điều đó.
ví dụ :
const j = `{"_id":{"$oid":"53c2ab5e4291b17b666d742a"},"last_seen_at":{"$date":1405266782008},"display_name":{"$undefined":true},
"ref":{"$ref":"col2", "$id":"53c2ab5e4291b17b666d742b"}}`
type TestS struct {
Id bson.ObjectId `bson:"_id"`
LastSeenAt *time.Time `bson:"last_seen_at"`
DisplayName *string `bson:"display_name,omitempty"`
Ref mgo.DBRef `bson:"ref"`
}
func main() {
var ts TestS
if err := ejson.Unmarshal([]byte(j), &ts); err != nil {
panic(err)
}
fmt.Printf("%+v\n", ts)
//or to convert the ejson to bson.M
var m map[string]interface{}
if err := json.Unmarshal([]byte(j), &m); err != nil {
t.Fatal(err)
}
err := ejson.Normalize(m)
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", m)
}