我收到了不同的BSON文件,这里有一个例子:
{ "group" : { "id": ObjectId("11a123456bc345d452d32c0b5"), "name": "SomeName" }, "count1": 6, "count2": 33, "totalCount": 39 }
我正在尝试使用mgo / gobson将此数据解组为map [string] interface {},但不断出现错误 . 解组代码是
var record map[string]interface{}
err := bson.Unmarshal(data, &record)
这导致错误说文档已损坏 . 查看代码,我看到它期望字节数组的长度是前几个字节,所以我添加了类似于测试中找到的代码 .
rec := make([]byte, len(data)+6)
binary.LittleEndian.PutUint32(rec, uint32(len(rec)))
copy(rec[4:], data)
这让我经历了腐败的文件错误,但现在我得到了
Unknown element kind (0x7B)
我做错了什么,我不能轻易地将上述BSON文档解组成 Map ? BSON文件本身有问题吗?我不是BSON文件的创建者,但如果有必要,我可以向他们提供反馈 .
1 回答
我尝试了上面的代码,并设法让它“工作” . 你得到的原因
是因为BSON规范中没有
0x7B
类的元素 . 见这里http://bsonspec.org/spec.html . 我得到的特定unknow元素是文档中第一个大括号({)的字节值在稍微调整一下代码后,我能够解决
unknown kind
错误 .我也发现这个答案很有用https://stackoverflow.com/a/33129119/2627768