将 $oid 和 $date 的 JSON/BSON 反序列化为 Go 语言。

huangapple go评论76阅读模式
英文:

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"`
}

http://play.golang.org/p/C2Bc7kf0B8

答案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)

playground示例

你可能想要解组为类似以下的结构:

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)

playground example

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.

huangapple
  • 本文由 发表于 2015年1月24日 06:05:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/28119490.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定