Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法使用Go将JSON字符串转换为Mongo扩展JSON?_Json_Go_Mongo Go - Fatal编程技术网

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

有没有办法使用Go将JSON字符串转换为Mongo扩展JSON?,json,go,mongo-go,Json,Go,Mongo Go,我有一个示例JSON正文,其中包含一些字符串。我希望将一些字符串转换为Mongo扩展JSON。例如,传入的JSON正文如下所示: { "GuidBinary": "734cba69-4851-4869-8d0e-e870d6fb3065", "DateTime": "12/12/2012", "RegularString": "abcd" } 我想把它转换成 { "GuidBinary": { "$binary": { "

我有一个示例JSON正文,其中包含一些字符串。我希望将一些字符串转换为Mongo扩展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"
}
{
“指导原则”:{
“$binary”:{
“base64”:“,
“子类型”:0x03
}
},
“日期时间”:{“$date”:“},
“常规字符串”:“abcd”
}

在Go中有没有办法做到这一点,可以通过mongo Go driver之类的软件包,也可以使用其他方法?

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

使用它的示例:

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)
这将输出(在上尝试):

{“DateTime”:{“$date”:“2009-11-10T23:00:00Z”},“常规字符串”:“abcd”,
“GuidBinary”:{“$binary”:{“base64”:“AQIDBAU=”,“subType”:“00”}}
因此,您需要做的是(使用包)解组原始JSON,并需要对其进行一些后处理:
GuidBinary
是输入JSON中的常规字符串,但它表示UUID。您需要将其解析为UUID值(可能有很多库用于此)


您还需要转换(解析)日期时间
DateTime
,它在输入中也是作为JSON文本给出的,但它表示一个日期。用于此。现在,您可以调用
bson.MarshalExtJSON()
来生成扩展的JSON。

假设我想做后处理,作为解组原始JSON步骤的一部分。你有什么建议吗?我正在考虑为二进制数据和日期创建字符串类型,然后在这些字符串类型上设置自定义解组器,但我不太确定这是如何工作的。@RiaruNeimu将解组器解组为一个简单的映射或结构,并手动执行后处理部分,以创建UUID和
time.time
值,并将新结构或映射传递到
MarshalExtJSON()
{"DateTime":{"$date":"2009-11-10T23:00:00Z"},"RegularString":"abcd",
    "GuidBinary":{"$binary":{"base64":"AQIDBAU=","subType":"00"}}} <nil>