java中對於JSON格式數據的操作,主要是json格式字符串與JavaBean之間的相互轉換。java中能夠解析JSON格式數據的框架有很多,比如json-lib,jackson,阿里巴巴的fastjson,谷歌的gson,本文只要對使用時間最長的json-lib和目前應用最為廣泛的jackson這兩種框架的使用進行說明。
首先准備兩個用於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的實現
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這個類。
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框架來做。
最后說一點,我們作為程序員,研究問題還是要仔細深入一點的。當你對原理了解的有夠透徹,開發起來也就得心應手了,很多開發中的問題和疑惑也就迎刃而解了,而且在面對其他問題的時候也可做到觸類旁通。當然在開發中沒有太多的時間讓你去研究原理,開發中要以實現功能為前提,可等項目上線的后,你有大把的時間或者空余的時間,你大可去刨根問底,深入的去研究一項技術,為覺得這對一名程序員的成長是很重要的事情。