为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法使用 Go 将 JSON 字符串转换为 Mongo 扩展 JSON?

有没有办法使用 Go 将 JSON 字符串转换为 Mongo 扩展 JSON?

Go
小唯快跑啊 2022-05-05 17:58:48
我有一个包含一些字符串的示例 JSON 正文。我希望将一些字符串转换为 Mongo Extended JSON。例如传入的 JSON 正文如下:{    "GuidBinary": "734cba69-4851-4869-8d0e-e870d6fb3065",    "DateTime": "12/12/2012",    "RegularString": "abcd"}我想把它转换成{    "GuidBinary": {        "$binary": {            "base64": "<payload>",            "subType": 0x03        }    },    "DateTime": {"$date": "<ISO-8601 Date/Time Format>"},    "RegularString": "abcd"}有没有办法在 Go 中做到这一点,无论是通过像 mongo-go-driver 这样的包还是其他方法?
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

是的,这是可能的。它是官方mongo-go驱动程序的一部分。生成此扩展 JSON将作为bson.MarshalExtJSON()函数发布。


使用它的示例:


m := map[string]interface{}{

    "GuidBinary":    []byte{1, 2, 3, 4, 5},

    "DateTime":      time.Now(),

    "RegularString": "abcd",

}


out, err := bson.MarshalExtJSON(m, false, false)

fmt.Println(string(out), err)

这将输出(在Go Playground上尝试):


{"DateTime":{"$date":"2009-11-10T23:00:00Z"},"RegularString":"abcd",

    "GuidBinary":{"$binary":{"base64":"AQIDBAU=","subType":"00"}}} <nil>

所以你需要做的是解组你的原始JSON(使用encoding/json包),你需要对它做一些后期处理:GuidBinary是输入JSON中的一个常规字符串,但它代表一个UUID。您需要将其解析为 UUID 值(可能有很多库)。


您还需要转换(解析)DateTime输入中的 JSON 文本,但它表示日期。用于time.Parse()此。现在您可以调用bson.MarshalExtJSON()生成扩展的 JSON。


查看完整回答
反对 回复 2022-05-05
  • 1 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信