日期:2014-05-16 浏览次数:20771 次
了解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)
那就看看这两个方法的具体实现
mongodb java客户端的对象主要是DBObject及其之类,采用递归方式处理嵌套关系,我们也可以从中学习到如何将一个对象转为string类型的其他格式。
| 类型 | 转化方式 | 
| Null类型: | 字符串 null | 
| Boolean类型:对应的值 | true False  | 
| Number类型: 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} | 
?
处理的内容比较明确:
以上讨论针对的是java对象转成json对象,接下去讨论json对象转化为bson对象。
这方面的内容bson连接讨论的比较详细,url为:http://bsonspec.org/#/specification
不过看了这个文档1个小时后终于把这个文档的两个事例看懂,因此有必要在这里说明下,以便其他观看文档的人更容易理解