有没有办法使用 Go 将 JSON 字符串转换为 Mongo 扩展 JSON?
Is there a way to convert a JSON string into a Mongo extended JSON using Go?
我有一个示例 JSON 正文,其中包含一些字符串。我希望将一些字符串转换为 Mongo Extended JSON。比如传入的JSON body是这样的:
{
"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 这样的包或其他方法来做到这一点?
是的,这是可能的。它是官方 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
包),你需要对它做一些 post 处理:GuidBinary
是输入中的常规字符串 JSON,但它代表一个 UUID。您需要将其解析为 UUID 值(可能有很多库用于此)。
您还需要转换(解析)DateTime
,它在输入中也作为 JSON 文本给出,但它表示日期。为此使用 time.Parse()
。现在您可以调用 bson.MarshalExtJSON()
来生成扩展的 JSON.
我有一个示例 JSON 正文,其中包含一些字符串。我希望将一些字符串转换为 Mongo Extended JSON。比如传入的JSON body是这样的:
{
"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 这样的包或其他方法来做到这一点?
是的,这是可能的。它是官方 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
包),你需要对它做一些 post 处理:GuidBinary
是输入中的常规字符串 JSON,但它代表一个 UUID。您需要将其解析为 UUID 值(可能有很多库用于此)。
您还需要转换(解析)DateTime
,它在输入中也作为 JSON 文本给出,但它表示日期。为此使用 time.Parse()
。现在您可以调用 bson.MarshalExtJSON()
来生成扩展的 JSON.