今天重写代码的时候,发现了一个异常: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