读书人

mongodb java驱动要害对象转化

发布时间: 2012-06-27 14:20:08 作者: rapoo

mongodb java驱动关键对象转化
目的

了解mongodb java驱动如何和mongod作数据交互,同时了解object json bson的数据格式解析过程

概述

mongodb采用的java转json是使用自定义的方法:com.mongodb.util.JSON类来处理;

转json:public static String serialize(Object o)

反转json:public static Object parse(String s)

那就看看这两个方法的具体实现

java object to json

mongodb java客户端的对象主要是DBObject及其之类,采用递归方式处理嵌套关系,我们也可以从中学习到如何将一个对象转为string类型的其他格式。


类型转化方式Null类型:字符串 nullBoolean类型:对应的值true
FalseNumber类型:
Byte Short Integer Long Float Double
BigInteger BigDecimal AutomicInteger
AutomicLong返回对应数值的字符串String类型:
这里的string类型主要是DBObject的key,
对于mongodb,DBObject的key为{“key”,...}这种格式,
因此要对特殊字符作处理,目前处理如下\ -> \\ “ -> \* \n -> \\n \r -> \\r
\t -> \\t \b -> \\b
ASCII为32之前的字符都忽略,这些是控制字符
举例:
abc -> “abc”
“abc -> “\”abc”
a\b”c -> “a\\b\”c”ObjectId类型:
对于ObjectId类型,先转成BasicDBObject方式再进行解析
{“$oid”, objectId.toString()}如objectId为:789dsab4adafasdfsdfasdf873294
{“$oid” : 789dsab4adafasdfsdfasdf873294}Iterable类型:
对于迭代起类型,递归调用每个类型进行处理字符迭代器:[abc, bcd, cde, def ]
DBObject迭代器:[{“abc”, value}, {“bcd”, value }, {“cde”, def} ]DBObject类型:
根据简单类型递归处理转成形如:
{key:{key,value}, key:value}Map类型:
这个基本不用想了,因为DBObject本身就继承自map,
所以map的解析和DBObject一致同上Date类型:{“$date”, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"}DBRefBase类型:
转成DBObject{”$ref”, ref.getRef(), “$id”, ref.getId()}byte[]或者Binary:<Binary Data>数组类型:[“key”:”value”, “key”:”value”]Pattern类型:
转DBObject{"$regex": o.toString(), $options: Bytes.regexFlags(((Pattern) o).flags())}BSONTimestamp类型:
转DBObject{“$ts”:t.getTime(), “$inc”:t.getInc()}UUID类型:
转DBObject{"$uuid":uuid.toString()}CodeWScope类型:
转DBObject{"$code":c.getCode(), "$scope": c.getScope()}Code类型:
转DBObject{"$code":c.getCode()}MinKey类型:
转DBObject{$minKey":1}MaxKey类型:
转DBObject{"$maxKey":1}

?

json to java object

处理的内容比较明确:

以上两个列子基本上能了解如何把一个json对象转成bson对象了,这样在wireshark协议时基本上也没什么问题。

bson to json

1.如何判断key,value编码方式:

每字节读取,分析字节是否为[0,127];是:表示为纯英文;如果有一个字符不为这个范围内的字符,表示包含其他字符方式,采用utf-8方式解码

2.

后续继续更新上去,可直接看mongodb源代码

https://github.com/michel-kraemer/bson4jackson

?

?


读书人网 >其他数据库

热点推荐