JSON(三)——java中對於JSON格式數據的解析之json-lib與jackson

  java中對於JSON格式數據的操做,主要是json格式字符串與JavaBean之間的相互轉換。java中可以解析JSON格式數據的框架有不少,好比json-lib,jackson,阿里巴巴的fastjson,谷歌的gson,本文只要對使用時間最長的json-lib和目前應用最爲普遍的jackson這兩種框架的使用進行說明。java

  首先準備兩個用於json格式字符串向JavaBean之間的相互轉換的類。程序員

public class User {
    private int age;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User [age=" + age + ", name=" + name + "]";
    }
    
}
public class ListUser {

    private List<User> listUser;

    public List<User> getListUser() {
        return listUser;
    }

    public void setListUser(List<User> listUser) {
        this.listUser = listUser;
    }
    
    
}

咱們先來看json-lib的實現web

public static void main(String[] args) throws Exception{
        String jsonStr1 = "{\"name\":\"張三\",\"age\":23}";
        String jsonStr2 = "[{\"name\":\"張三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
        String jsonStr3 = "{\"listUser\": [{\"name\":\"張三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }";

     //json-lib中json對象的構造器
     JSONObject jsonObject = JSONObject.fromObject(jsonStr1);
     //轉換javaBean
     User user = (User)JSONObject.toBean(jsonObject, User.class);
    
//json-lib中json數組的構造器      JSONArray jsonArray = JSONArray.fromObject(jsonStr2);      //json數組轉換爲list集合      List<User> list = (List<User>)jsonArray.toCollection(jsonArray, User.class);      //對於"jsonStr3"這種數據格式的轉換json的實現較爲麻煩。      //首先建立一個ListUser對象。      ListUser lu = new ListUser();      //json構造器      JSONObject jsonObject1 = JSONObject.fromObject(jsonStr3);      //獲取json數組      JSONArray jsonArray1 = (JSONArray)jsonObject1.get("listUser");      //json數組轉換爲list集合      List<User> list2 = (List<User>)jsonArray.toCollection(jsonArray1, User.class);      lu.setListUser(list2);      }

 再來看一下jackson對這兩種數據格式的轉換。主要用到jackson的ObjectMapper這個類。spring

public static void main(String[] args) throws Exception{
        String jsonStr1 = "{\"name\":\"張三\",\"age\":23}";
        String jsonStr2 = "[{\"name\":\"張三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
        String jsonStr3 = "{\"listUser\": [{\"name\":\"張三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }";
     
     ObjectMapper mapper = new ObjectMapper();
    
     User user = mapper.readValue(jsonStr1, User.class);
    
     List<User> userList = new ArrayList<User>();
    userList =(List<User>)mapper.readValue(jsonStr2, list.getClass());

     ListUser readValue = mapper.readValue(jsonStr3, ListUser.class);
    

}

 

從以上兩種框架的比較來看,相對於json-lib的轉換來講jackson比較簡單,並且從性能上來講jackson的轉換速度也比較快。另外springmvc框架也包含了jackson框架,使咱們在web工程中對於json的使用更加的方便。因此對於json數據格式的解析推薦是哪一個jackson框架來作。json

  最後說一點,咱們做爲程序員,研究問題仍是要仔細深刻一點的。當你對原理了解的有夠透徹,開發起來也就駕輕就熟了,不少開發中的問題和疑惑也就迎刃而解了,並且在面對其餘問題的時候也可作到舉一反三。固然在開發中沒有太多的時間讓你去研究原理,開發中要以實現功能爲前提,可等項目上線的後,你有大把的時間或者空餘的時間,你大可去刨根問底,深刻的去研究一項技術,爲以爲這對一名程序員的成長是很重要的事情。數組

相關文章
相關標籤/搜索