是否有一种使用Go将JSON字符串转换为Mongo扩展JSON的方法?

问题描述 投票:1回答:1

我有一个示例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这样的包或其他方法来做到这一点?

json go mongo-go
1个回答
0
投票

是的,有可能。它是官方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。

© www.soinside.com 2019 - 2024. All rights reserved.