JSON

各個(gè)JSON技術(shù)的比較

  1. json-lib
    最開始的也是應(yīng)用最廣泛的json解析工具,json-lib 不好的地方確實(shí)是依賴于很多第三方包,
    包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,
    對于復(fù)雜類型的轉(zhuǎn)換,json-lib對于json轉(zhuǎn)換成bean還有缺陷,比如一個(gè)類里面會出現(xiàn)另一個(gè)類的list或者map集合,json-lib從json到bean的轉(zhuǎn)換就會出現(xiàn)問題。
    json-lib在功能和性能上面都不能滿足現(xiàn)在互聯(lián)網(wǎng)化的需求。
//創(chuàng)建一個(gè)javabean
public class Item {
    private String name;
    private int size;
    private String type;
    //getter and setter

    public Item(){}

    public Item(String name, int size, String type) {
        this.name = name;
        this.size = size;
        this.type = type;
    }

    @Override
    public String toString() {
        return "Item{" +
                "name='" + name + '\'' +
                ", size=" + size +
                ", type='" + type + '\'' +
                '}';
    }
}
//核心代碼
public static void main(String[] args) {

        Item item1 = new Item("itemName1",21,"String");
        Item item2 = new Item("itemName2",22,"Boolean");
        Item item3 = new Item("itemName3",23,"Integer");

        List<Item> list = new ArrayList<Item>();//構(gòu)造一個(gè)List集合
        list.add(item1);
        list.add(item2);
        list.add(item3);


        Item[] items = {item1,item2,item3};//構(gòu)造一個(gè)數(shù)組

        Map<String,Item> map = new HashMap<String,Item>();//構(gòu)造一個(gè)map集合
        map.put(item1.getName(),item1);
        map.put(item2.getName(),item2);
        map.put(item3.getName(),item3);


        //將Java數(shù)組轉(zhuǎn)換成JSONArray
        JSONArray jsonArray = JSONArray.fromObject(items);
        System.out.println(jsonArray);

        //將Java的List集合轉(zhuǎn)換成JSONArray
        jsonArray = JSONArray.fromObject(list);
        System.out.println(jsonArray);

        //將Java的Map集合轉(zhuǎn)換成JSONObject
        JSONObject jsonObject = JSONObject.fromMap(map);//(1)
        System.out.println(jsonObject);
        jsonObject = JSONObject.fromObject(map);//(2)
        System.out.println(jsonObject);
        //(1)(2)都可以

        //將普通的JavaBean轉(zhuǎn)換成JSONObject
        jsonObject = JSONObject.fromObject(item1);
        System.out.println(jsonObject);

        //將JSONObject轉(zhuǎn)換成JavaBean對象
        Item item = (Item) JSONObject.toBean(jsonObject, Item.class);
        System.out.println(item.toString());

        //JSONObject的方法
        String name = (String) jsonObject.get("name");//取得JavaBean的屬性值
        System.out.println(name);
        //向json對象中添加JavaBean對象或者任意類型數(shù)據(jù)
        JSONObject testObj1 = jsonObject.accumulate("test1", item1);
        System.out.println(testObj1);
        //向json對象中添加JavaBean對象或者任意類型數(shù)據(jù)
        JSONObject testObj2 = jsonObject.put("test", item2);
        System.out.println(testObj2);
    }
//從Java對象(包括集合對象)到j(luò)son對象均可使用fromObject()方法,唯一不同的是調(diào)用方法的對象不一致(map集合以外常用的集合使用JSONArray,map集合及簡單JavaBea使用JSONObject)。
  1. 開源的Jackson
    相比json-lib框架,Jackson所依賴的jar包較少,簡單易用并且性能也要相對高些。
    而且Jackson社區(qū)相對比較活躍,更新速度也比較快。
    Jackson對于復(fù)雜類型的json轉(zhuǎn)換bean會出現(xiàn)問題,一些集合Map,List的轉(zhuǎn)換出現(xiàn)問題。
    Jackson對于復(fù)雜類型的bean轉(zhuǎn)換Json,轉(zhuǎn)換的json格式不是標(biāo)準(zhǔn)的Json格式
  2. Google的Gson
    Gson是目前功能最全的Json解析神器,Gson當(dāng)初是為因應(yīng)Google公司內(nèi)部需求而由Google自行研發(fā)而來,
    但自從在2008年五月公開發(fā)布第一版后已被許多公司或用戶應(yīng)用。
    Gson的應(yīng)用主要為toJson與fromJson兩個(gè)轉(zhuǎn)換函數(shù),無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
    而在使用這種對象轉(zhuǎn)換之前需先創(chuàng)建好對象的類型以及其成員才能成功的將JSON字符串成功轉(zhuǎn)換成相對應(yīng)的對象。
    類里面只要有g(shù)et和set方法,Gson完全可以將復(fù)雜類型的json到bean或bean到j(luò)son的轉(zhuǎn)換,是JSON解析的神器。
    Gson在功能上面無可挑剔,但是性能上面比FastJson有所差距。
  3. 阿里巴巴的FastJson
    Fastjson是一個(gè)Java語言編寫的高性能的JSON處理器,由阿里巴巴公司開發(fā)。
    無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
    FastJson在復(fù)雜類型的Bean轉(zhuǎn)換Json上會出現(xiàn)一些問題,可能會出現(xiàn)引用的類型,導(dǎo)致Json轉(zhuǎn)換出錯,需要制定引用。
    FastJson采用獨(dú)創(chuàng)的算法,將parse的速度提升到極致,超過所有json庫。
//Fastjson API入口類是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON類上的靜態(tài)方法直接完成。

public static final Object parse(Stringtext); // 把JSON文本parse為JSONObject或者JSONArray 
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse為JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化為帶格式的JSON文本 
public static final Object toJSON(Object javaObject); 將JavaBean轉(zhuǎn)換為JSONObject或者JSONArray。
//SerializeWriter:相當(dāng)于StringBuffer
//JSONArray:相當(dāng)于List<Object>
//JSONObject:相當(dāng)于Map<String, Object>
//JSON反序列化沒有真正數(shù)組,本質(zhì)類型都是List<Object>

一、json字符串的數(shù)據(jù)解析
1.json字符串 ---> JSONObject或者JSONArray【好處就是當(dāng)你沒有bean的model類時(shí),可以直接獲取相關(guān)數(shù)據(jù)】
          Object parse(String text)【這是下面2個(gè)方法的合集,是大招!】
          JSONObject parseObject(String text)
          JSONArray parseArray(String text)

2.json字符串 ---> bean對象【好處是如果你有model,你可以解析為java對象然后繼續(xù)操作】
          T parseObject(String text, Class clazz)          //一個(gè)bean對象的解析生成
          List parseArray(String text, Class clazz)          //多個(gè)bean對象的解析生成

二、java對象的json格式化

1.bean對象轉(zhuǎn)json字符串
          String toJSONString(Object object)
          String toJSONString(Object object, boolean prettyFormat)
2.java對象轉(zhuǎn)換為JSONObject或者JSONArray【是大招,單個(gè)bean對象能轉(zhuǎn),list集合也能轉(zhuǎn)】,有了這一步,再來個(gè)toString就ok了。
     Object toJSON(Object javaObject);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容