新增:该第三方库已不推荐使用,更好第三方库的请移步Gson–更快的json数据解析库
最近写程序设计(Java)的时候需要socket通信传输数据,并且是跨平台的,不能直接传含有类型的数据。接触过一些web开发,也写过ajax,知道可以用json或者是xml,但是考虑到xml数据冗余,决定用json。
各种找jar包
首先,我很确定各种开发语言都会提供json相关的库,于是上网直接搜转换的jar包。网上说的很简单,基本上就是调用一个函数就行,兴冲冲地去把jar包(json-lib-2.4-jdk13.jar)下下来,添加进文件。
IDE检查是没问题了,但是一运行就会出错,然后又上网debug,网上说一个jar包不够,还要其他五个jar包,于是一一搜索,把最新的全部下载,倒进去。但是运行依旧出错,继续debug,网上竟然说需要特定的版本,我也是醉了。无奈之下,按照网上说的几种搭配方式乱试一通,全都不行。近乎崩溃。
手工不行,只能上杀器了。关门,上maven。一番折腾之后,maven找到了合适的包,解决了这个问题。可以工作的jar包组合如下:commons-beanutils-1.8.0.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar、json-lib-2.4-jdk13.jar。
另引用网友的结论“java 转json 报错处理机制 案例”,如果报错可以找到对应的错误。
报错处理机制
commons-beanutils-1.8.0.jar不加这个包
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean
commons-collections.jar 不加这个包
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap
commons-lang-2.4.jar不加这个包
java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
commons-logging-1.1.1.jar不加这个包
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
ezmorph-1.0.4.jar不加这个包
java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher
json-lib-2.3-jdk15.jar不加这个包
java.lang.NoClassDefFoundError: net/sf/json/JSONObject
我想吐槽下,这真是垃圾的设计,实现一个简单的功能竟然要依赖多达6个包,而且更气人的是这些jar包的版本之间不能相互兼容!多么糟糕的设计啊。(或许已经有人解决了这个问题,但是没有找到,可能跟没用谷歌有关吧)。
Java中转换成json格式有两种方法,另外一种我就不写了,有兴趣的可以去这里看:Java构造和解析Json数据的两种方法详解一
最后,贴上经过测试可以运行的代码,和相应的jar包。
1 | package javalist2json; |