是否有用于 PHP 或 Java 的 BSON 序列化器/反序列化器库?
5 回答
另一种可能性是Jackson的BSON4Jackson扩展,它增加了对 BSON 读/写的支持。
Java 中的 BSON 编码器/解码器非常简单。以下代码片段来自我的应用程序,所以它在 Scala 中。我相信您可以轻松地从中构建 Java 实现。
import org.bson.BSON
import com.mongodb.{DBObject, DBDecoder, DefaultDBDecoder}
def convert(dbo: DBObject): Array[Byte] =
BSON.encode(dbo)
// NB! this is a stateful object and thus it's not thread-safe, so have
// to create one per decoding
def decoder: DBDecoder = DefaultDBDecoder.FACTORY.create
def convert(data: Array[Byte]): DBObject =
// NOTE: we do not support Ref in input, that's why "null" for DBCollection
decoder.decode(data, null)
def convert(is: InputStream): DBObject =
// NOTE: we do not support Ref in input, that's why "null" for DBCollection
decoder.decode(is, null)
唯一重要的注意事项是该DBEncoder
实例在解码期间具有它(重新)使用的内部状态,因此它不是线程安全的。如果您逐个解码对象应该没问题,但否则您最好为每个解码会话创建一个实例。
检查此链接 http://php.net/manual/en/ref.mongo.php
bson_decode — 将 BSON 对象反序列化为 PHP 数组
bson_encode — 将 PHP 变量序列化为 BSON 字符串
您可以检查这些语言的 MongoDB 驱动程序,因为 MongoDB 使用 BSON。查看他们使用什么,或窃取他们的实现。
这是我使用 Rapidjson 制作的 C++11 JSON 编码器和解码器,因为原生 JSON 编码器 ( BSONObj::jsonString
) 对 long 使用非标准编码:https ://gist.github.com/ArtemGr/2c44cb451dc6a0cb46af
此外,与原生 JSON 编码器不同,这个编码器在解码顶级数组时没有问题。