使用Mongo Go Driver解析BSON扩展JSON日期失败原因?
问题原因及解决办法
报错的核心原因是你调用bson.UnmarshalExtJSON时第二个参数传了true,这个参数代表启用规范模式的扩展JSON解析规则,但你提供的是宽松模式的$date格式。
两种模式对$date的要求不同:
- 规范模式下,
$date的值必须是包含$numberLong(毫秒级时间戳)的嵌套对象,格式类似:{"$date": {"$numberLong": "1704067200000"}} - 宽松模式才允许
$date直接使用ISO 8601格式的字符串。
解决方式1:切换为宽松模式解析
修改代码中的第二个参数为false,适配你当前的JSON格式:
var v bson.M bsonString := `{"createdAt": {"$date": "2024-01-01T00:00:00.000Z"}}` err := bson.UnmarshalExtJSON([]byte(bsonString), false, &v) if err != nil { t.Fatalf("cannot unmarshal: %v", err) }
解决方式2:改用规范模式的JSON格式
保持解析参数为true,同时调整JSON字符串为规范模式的格式:
var v bson.M bsonString := `{"createdAt": {"$date": {"$numberLong": "1704067200000"}}}` err := bson.UnmarshalExtJSON([]byte(bsonString), true, &v) if err != nil { t.Fatalf("cannot unmarshal: %v", err) }
内容的提问来源于stack exchange,提问作者AleG
相关产品推荐
相关产品推荐

