今天重写代码的时候,发现了一个异常:java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntime
问题很快就解决了,是因为少了common-lang-2.6.jar。为什么会少了common-lang-2.6.jar,这是因为前一阵子想用 common-lang3包替换common-lang-2.6.jar。
百度了下,发现net.sf.json需要这么多:
1.commons-beanutils-1.9.1.jar
2.commons-collections-3.2.1.jar
3.commons-lang-2.6.jar
4.commons-logging-1.2.jar
5.ezmorph-1.0.6.jar
首先太麻烦了!其次commons-lang的最近一次更新是2011年。
从2011年之后,其它各种jsond实现包有许多更新(或者新出现),譬如:
- google的gson
- 阿里的 fastJson
- jackson
- jackSon的,主要是做json和object的映射,使用起来有点麻烦,如果不想做对象映射,那么可以不怎么考虑,当然效率也不错
- fastJson,总体不错,有许多简单的静态类实现
- gson,也还可以。
网络上,不怎么建议用net.sf.json,因为效率,没有确认过。以前的项目有用,估计是因为生成JSONobject,JSONArray比较方便。
---
考虑到各种因素,我已经不再让小组成员使用net.sf.json,可以使用fastjson和gson来替代,一个项目尽量使用一个json方案。
以后,需要使用object生成JSONArray的时候,只需要如下即可(红色字体部分):
package study.base.json.jackson; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.serializer.SerializerFeature; public class TestJackSon { public static void main(String[] args) { List<Map<String, Object>> lm = new ArrayList<Map<String, Object>>(); for (int i = 0; i < 3; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("no", Integer.valueOf(i)); map.put("age", 12); map.put("name", "luzhifei"); lm.add(map); } JSONArray o = (JSONArray) JSONArray.toJSON(lm); System.out.println(o.toString(SerializerFeature.PrettyFormat)); } }
结果如下:
[ { "name":"luzhifei", "no":0, "age":12 }, { "name":"luzhifei", "no":1, "age":12 }, { "name":"luzhifei", "no":2, "age":12 } ]