java关于json的一些问题

今天重写代码的时候,发现了一个异常: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实现包有许多更新(或者新出现),譬如:

  1. google的gson
  2. 阿里的 fastJson
  3. 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
    }
]

 

 

 

posted @ 2020-03-17 19:44  正在战斗中  阅读(296)  评论(0编辑  收藏  举报