读书人

简略实用的Object2JSON小工具:JSONUtil

发布时间: 2012-10-28 09:54:44 作者: rapoo

简单实用的Object2JSON小工具:JSONUtil
本工具用来把Java对象转换成JSON格式输出.小巧实用,接口友好欢迎大家拍砖,指导.

1 基本功能:
1.1 支持基本类型及其包装类和Date的解析.
1.2 支持指定关联关系类的解析
1.3 支持数组,List的解析
1.4 支持忽略一层嵌套类(见说明 3.2)

2 基本调用方法:

LangObject:{"booleanObject":"true","booleanValue":"true","byteObject":2,"byteValue":2,"characterObject":"3","characterValue":"3","doubleObject":4.0,"doubleValue":4.0,"floatObject":5.0,"floatValue":5.0,"integerObject":6,"integerValue":6,"longObject":7,"longValue":7,"shortObject":8,"shortValue":8,"sqlDate":"2009/06/06","utilDate":"2009/06/12"}


2009-6-25
上传:
用Collection接口替代List
去掉对象名 1 楼 liangx 2009-06-12 每个对象前面的对象名称能不能不显示? 2 楼 jomper 2009-06-12 liangx 写道每个对象前面的对象名称能不能不显示?
可以啊,只是目前被我去掉了。 一般显示属性名吧?要是觉得simple类名好,我可以加上开关。 3 楼 liangx 2009-06-25 自己改了.其实现在有很多JSON的库.但是那些无用的功能太多.试了一下这个.功能不错.拿来用了.不介意吧! 4 楼 grandboy 2009-06-25 呵呵,我前几天刚自己实现了一个这样的工具。

建议: 实现一个反向的功能, 就是json2Object. 5 楼 jomper 2009-06-25 liangx 写道自己改了.其实现在有很多JSON的库.但是那些无用的功能太多.试了一下这个.功能不错.拿来用了.不介意吧!
的确,我这边的也改了,因为那样会照成json格式不合法。我尽快上传。
开源的当然不介意啊. 6 楼 jomper 2009-06-25 grandboy 写道呵呵,我前几天刚自己实现了一个这样的工具。

建议: 实现一个反向的功能, 就是json2Object.

如 liangx 的需求,他要求不要用变量名也不用类名做json的对象名。要实现反向必须用类名,不然无法find class for name.这里就出现矛盾了。

而且这里加上类名会使生成json格式不合法。

其他没有什么问题,XML的正向反向我早在XMLUtil里实现了,在博客里有。

另外把支持List变成了支持collection,有空我传一下。
7 楼 asklxf 2009-06-25 很久以前写的java2json的转换:
http://www.ibm.com/developerworks/cn/web/wa-lo-json/ 8 楼 jomper 2009-06-25 asklxf 写道很久以前写的java2json的转换:
http://www.ibm.com/developerworks/cn/web/wa-lo-json/
谢谢你的推荐, 犹豫无法下载只能从表面猜测您的做法。
希望能提供源代码,学习您的思想。

从接口上看,我自认为没有我处理的好。指定对象解析,是我提出的要点。 9 楼 asklxf 2009-06-25 jomper 写道asklxf 写道很久以前写的java2json的转换:
http://www.ibm.com/developerworks/cn/web/wa-lo-json/
谢谢你的推荐, 犹豫无法下载只能从表面猜测您的做法。
希望能提供源代码,学习您的思想。

从接口上看,我自认为没有我处理的好。指定对象解析,是我提出的要点。

小工具不需要接口,不用搞那么复杂

代码下不了可能是code.google.com还在被挟持中 10 楼 jomper 2009-06-25 asklxf 写道jomper 写道asklxf 写道很久以前写的java2json的转换:
http://www.ibm.com/developerworks/cn/web/wa-lo-json/
谢谢你的推荐, 犹豫无法下载只能从表面猜测您的做法。
希望能提供源代码,学习您的思想。

从接口上看,我自认为没有我处理的好。指定对象解析,是我提出的要点。

小工具不需要接口,不用搞那么复杂

代码下不了可能是code.google.com还在被挟持中

可能有点误会,我说的接口是,使用接口(你的 toJson(object)),而不是java的interface.你至少是没有看过的代码,甚至连我的说明都懒得看就贴了您的URL。呵呵。 11 楼 asklxf 2009-06-26 jomper 写道asklxf 写道jomper 写道asklxf 写道很久以前写的java2json的转换:
http://www.ibm.com/developerworks/cn/web/wa-lo-json/
谢谢你的推荐, 犹豫无法下载只能从表面猜测您的做法。
希望能提供源代码,学习您的思想。

从接口上看,我自认为没有我处理的好。指定对象解析,是我提出的要点。

小工具不需要接口,不用搞那么复杂

代码下不了可能是code.google.com还在被挟持中

可能有点误会,我说的接口是,使用接口(你的 toJson(object)),而不是java的interface.你至少是没有看过的代码,甚至连我的说明都懒得看就贴了您的URL。呵呵。

看过你的代码,觉得比较复杂,因为json的数据对象是固定的几种,映射到java也很简单,没有必要指定class[],通过反射+递归就可以解析出json对象,返回string比传入stringbuffer好,接口越简单越好:

String toJson(Object o) 12 楼 jomper 2009-06-26 asklxf 写道jomper 写道asklxf 写道jomper 写道asklxf 写道很久以前写的java2json的转换:
http://www.ibm.com/developerworks/cn/web/wa-lo-json/
谢谢你的推荐, 犹豫无法下载只能从表面猜测您的做法。
希望能提供源代码,学习您的思想。

从接口上看,我自认为没有我处理的好。指定对象解析,是我提出的要点。

小工具不需要接口,不用搞那么复杂

代码下不了可能是code.google.com还在被挟持中

可能有点误会,我说的接口是,使用接口(你的 toJson(object)),而不是java的interface.你至少是没有看过的代码,甚至连我的说明都懒得看就贴了您的URL。呵呵。

看过你的代码,觉得比较复杂,因为json的数据对象是固定的几种,映射到java也很简单,没有必要指定class[],通过反射+递归就可以解析出json对象,返回string比传入stringbuffer好,接口越简单越好:

String toJson(Object o)

1.对于有没有必要指定需要解析的class[]
1.1 因为是反射+递归解析,碰到一个大点的对象就会解析到很深。但是需要的json数据不见得的需要全部的内容。指定class[]以后可以更灵活的处理你需要的数据内容,提高性能。还能避免object.getClass这样没有用的数据.
1.2 碰到嵌套异常怎么办?告诉别人这个工具不行了,用别的吧?所以指定需要解析的class[]能有效的避免嵌套异常。至少可以不去解析那个可能引起嵌套异常的类。
1.3 本身class[]是动态参数,可以忽略。

2.对于是否要用stringbuffer
2.1 我一直很提倡pass by value的做法
2.2 很多情况下并不是给出一个object2json的数据就能满足,例如EXT需要一个totalProperty和root参数。用stringbuffer更容易去包装这个json数据.而不是扔给别人一个string去"+"了事的。

3.这个工具是否复杂
3.1 这个方法一共3个参数,其中一个还是动态参数。完全在sun对于方法参数个数建议的范围内.
3.2 这个工具用很小的代价,带来了更灵活的处理方式,这个代价我是可以接受的。
3.3 在除jdk5外不依赖任何包的前提下一共不到100行的代码完成了以上功能,我觉得还是对得起观众的。呵呵。

google code可以连接后,我有幸拜读了你的源码.
1.对于在toJson(o)里RuntimeException Unsupported type且不做处理的方式有疑问,反射是机械的,所以考虑不到全部情况很正常。这里忽略比立即停止抛出异常要好。不然显得程序的容错性很差。
2.还是在toJson(o)里instanceof Map后武断的转化成MAP<String,Object>是有问题的。类里面有个其他泛型约束的Map出现是完全合理的(例如Map<Object,Object>),在你这里就会出错。
3.解析对象为null,往数据里填充个"null",实在无法理解,貌似"{null}"也不是个合法格式吧?诸如此类的还有很多,就不一一说明了。
4.对于基本类型大量的instanceof判断颇有微词,你可以参考下我是怎么做的,这个做法也是借鉴javaeye的一个高手的,呵呵。

总之我抱着学习探讨的心态还是很高兴的,感谢你关注我的帖子,感谢您的建议,共勉。

读书人网 >JavaScript

热点推荐