英文:
Unmarshalling $oid and $date json/bson to go
问题
我正在尝试在Go中解析以下JSON字符串:
{"dt": {"$date": 1422019966844}, "_id": {"$oid": "54c24d7eabb7c06d4f000371"}}
我尝试了许多不同的方法来解析它,但是找不到有效的方法。有没有一种惯用的方式将其解析为对象?
谢谢,
Z.
英文:
I'm trying to unmarshal the following json string in go:
{"dt": {"$date": 1422019966844}, "_id": {"$oid": "54c24d7eabb7c06d4f000371"}}
I've tried a number of different ways to unmarshal this but couldn't find a way that works. What is the idiomatic way to unmarshal that to an object?
Thanks,
Z.
答案1
得分: 1
如果你知道你要获取的JSON的格式,最好的方法是设计一个与该格式相同的结构体。
type MyJSON struct {
Dt struct {
Date int64 `json:"$date"`
} `json:"dt"`
Id struct {
Oid string `json:"$oid"`
} `json:"_id"`
}
你可以在这个链接中查看示例代码:http://play.golang.org/p/C2Bc7kf0B8
英文:
If you know the format of the JSON you're getting, the best you can do is to design a struct with the same format.
type MyJSON struct {
Dt struct {
Date int64 `json:"$date"`
} `json:"dt"`
Id struct {
Oid string `json:"$oid"`
} `json:"_id"`
}
答案2
得分: 1
以下是对上述内容的翻译:
这是一种将JSON解组为Go语言的方法:
d := []byte(`{"dt": {"$date": 1422019966844}, "_id": {"$oid": "54c24d7eabb7c06d4f000371"}}`)
var v struct {
Dt struct {
Date int64 `json:"$date"`
}
ID struct {
OID string `json:"$oid"`
} `json:"_id"`
}
err := json.Unmarshal(d, &v)
你可能想要解组为类似以下的结构:
var v struct {
ID bson.ObjectID `bson:"_id"`
Dt time.Time
}
我建议解组原始的BSON,而不是Javascript客户端对BSON的表示形式。
英文:
Here's one way to unmarshal the JSON to Go:
d := []byte(`{"dt": {"$date": 1422019966844}, "_id": {"$oid": "54c24d7eabb7c06d4f000371"}}`)
var v struct {
Dt struct {
Date int64 `json:"$date"`
}
ID struct {
OID string `json:"$oid"`
} `json:"_id"`
}
err := json.Unmarshal(d, &v)
You probably want to unmarshal to something like:
var v struct {
ID bson.ObjectID `bson:"_id"`
Dt time.Time
}
I suggest unmarshalling the original BSON instead of the Javascript client's representation of the BSON.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论