我尝试了上面的代码,并设法让它“工作” . 你得到的原因
Unknown element kind (0x7B)
是因为BSON规范中没有 0x7B 类的元素 . 见这里http://bsonspec.org/spec.html . 我得到的特定unknow元素是文档中第一个大括号({)的字节值
{ "group" : { "id": ObjectId("11a123456bc345d452d32c0b5"), "name": "SomeName" }, "count1": 6, "count2": 33, "totalCount": 39 }
在稍微调整一下代码后,我能够解决 unknown kind 错误 .
package main
import (
"encoding/binary"
"fmt"
"gopkg.in/mgo.v2/bson"
)
func main() {
bsonData := `{ "group" : { "id": ObjectId("11a123456bc345d452d32c0b5"), "name": "SomeName" }, "count1": 6, "count2": 33, "totalCount": 39 }`
var record map[string]interface{}
rec := make([]byte, len(bsonData)+6)
binary.LittleEndian.PutUint32(rec, uint32(len(rec)))
copy(rec[4:], bsonData)
//Adding a new line to the front of the rec byte variable seems to do the trick
r := []byte("\n")
rec[4] = r[0]
err := bson.Unmarshal(rec, &record)
if err != nil {
panic(err)
}
fmt.Println(record)
}