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

我如何将 BSON 文档转换为 map[string]interface{}

我如何将 BSON 文档转换为 map[string]interface{}

Go
慕田峪9158850 2023-06-01 14:28:16
我试图将游标的数据解码成一个map[string]interface{},我直接尝试了但是它根本不起作用,所以我发现我必须将它转换为BSON文档然后再转换它到 map[string]interface{},最后变成 JSON 字符串。我尝试了以下代码:... for cursor.Next(context.Background()) {     err = cursor.Decode(&itemBson)     ...     b, err := bson.Marshal(itemBson)     ...     err = bson.Unmarshal(b, &itemMap)     ... } ...但是bson文档有如下值:地图[_id:ObjectID("5c2d0809a49bad7d547ec028") applications:bson.Array[bson.Document{bson.Element{"enabled": true}}] userName:coto userUUID:df2d ea92-c189-53b3-aafe-485d0be23bee]并将地图解析为 JSON:{"_id":"5c2d0809a49bad7d547ec028","applications":[{}],"userName":"coto","userUUID":"df2dea92-c189-53b3-aafe-485d0be23bee"}如您所见,键“applications”在 JSON 中为空,但它在 BSON 文档中确实有内容。我不知道为什么数据会消失。我该如何解决这个错误?谢谢。
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

解决了:


我使用以下代码解决了这个错误:


var jsonDocuments []map[string]interface{}

var byteDocuments []byte


var bsonDocument bson.D

var jsonDocument map[string]interface{}

var temporaryBytes []byte


for cursor.Next(context.Background()) {

    err = cursor.Decode(&bsonDocument)


    ...


    temporaryBytes, err = bson.MarshalExtJSON(bsonDocument, true, true)


    ...


    err = json.Unmarshal(temporaryBytes, &jsonDocument)


    ...


    jsonDocuments = append(jsonDocuments, jsonDocument)

}


查看完整回答
反对 回复 2023-06-01
?
GCT1015

TA贡献1827条经验 获得超4个赞

temp := itemBson.data.(primitive.D) // convert interface to primitive D


metadata := temp.Map() // map to map[string]interface{}


if v, ok := metadata[prqKey]; ok { // check and use value

    commitID = v.(string)

}

您可以使用类型的内置接口primitive.D将其转换为map[string]interface{}


查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

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