相关文章推荐
打篮球的匕首  ·  Qt之JSON基础操作_qt ...·  2 周前    · 
开朗的路灯  ·  spring ...·  2 月前    · 
爽快的烤面包  ·  c# ...·  1 年前    · 

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