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