我有一个示例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这样的包或其他方法来做到这一点?
是的,有可能。它是官方mongo-go
驱动程序的一部分。生成此extended JSON作为bson.MarshalExtJSON()
函数发布。
使用示例:
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
所以您需要做的是将原始JSON解组(使用{"DateTime":{"$date":"2009-11-10T23:00:00Z"},"RegularString":"abcd",
"GuidBinary":{"$binary":{"base64":"AQIDBAU=","subType":"00"}}} <nil>
包),并且需要对其进行一些后处理:encoding/json
是输入JSON中的常规字符串,但是它代表某种形式UUID。您需要对其进行解析并将其转换为字节片。您最有可能只需要将其解析为十六进制字符串(省略破折号)。
您还需要转换(解析)encoding/json
,它在输入中也以JSON文本形式提供,但它代表一个日期。为此使用GuidBinary
。现在,您可以调用DateTime
生成扩展的JSON。