http://jilongliang.iteye.com/blog/1967068?utm_source=tuicool&utm_medium=referralhtml
http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.htmljava
在www.json.org上公佈了不少JAVA下的json構造和解析工具,其中org.json和json-lib比較簡單,二者使用上差很少但仍是有些區別。下面首先介紹用json-lib構造和解析Json數據的方法示例。 用org.son構造和解析Json數據的方法詳解請參見我下一篇博文:Java構造和解析Json數據的兩種方法詳解二 1、介紹 JSON-lib包是一個beans,collections,maps,java arrays 和XML和JSON互相轉換的包,主要就是用來解析Json數據,在其官網http://www.json.org/上有詳細講解,有興趣的能夠去研究。 2、下載jar依賴包:能夠去這裏下載 3、基本方法介紹 1. List集合轉換成json方法 List list = new ArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray2 = JSONArray.fromObject( list ); 2. Map集合轉換成json方法 複製代碼 Map map = new HashMap(); map.put("name", "json"); map.put("bool", Boolean.TRUE); map.put("int", new Integer(1)); map.put("arr", new String[] { "a", "b" }); map.put("func", "function(i){ return this.arr[i]; }"); JSONObject json = JSONObject.fromObject(map); 複製代碼 3. Bean轉換成json代碼 JSONObject jsonObject = JSONObject.fromObject(new JsonBean()); 4. 數組轉換成json代碼 boolean[] boolArray = new boolean[] { true, false, true }; JSONArray jsonArray1 = JSONArray.fromObject(boolArray); 5. 通常數據轉換成json代碼 JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" ); 6. beans轉換成json代碼 複製代碼 List list = new ArrayList(); JsonBean2 jb1 = new JsonBean2(); jb1.setCol(1); jb1.setRow(1); jb1.setValue("xx"); JsonBean2 jb2 = new JsonBean2(); jb2.setCol(2); jb2.setRow(2); jb2.setValue(""); list.add(jb1); list.add(jb2); JSONArray ja = JSONArray.fromObject(list); 複製代碼 4、演示示例 這裏以基本的幾個經常使用方法進行測試 複製代碼 package com.json; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * 使用json-lib構造和解析Json數據 * * @author Alexia * @date 2013/5/23 * */ public class JsonTest { /** * 構造Json數據 * * @return */ public static String BuildJson() { // JSON格式數據解析對象 JSONObject jo = new JSONObject(); // 下面構造兩個map、一個list和一個Employee對象 Map<String, String> map1 = new HashMap<String, String>(); map1.put("name", "Alexia"); map1.put("sex", "female"); map1.put("age", "23"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("name", "Edward"); map2.put("sex", "male"); map2.put("age", "24"); List<Map> list = new ArrayList<Map>(); list.add(map1); list.add(map2); Employee employee = new Employee(); employee.setName("wjl"); employee.setSex("female"); employee.setAge(24); // 將Map轉換爲JSONArray數據 JSONArray ja1 = JSONArray.fromObject(map1); // 將List轉換爲JSONArray數據 JSONArray ja2 = JSONArray.fromObject(list); // 將Bean轉換爲JSONArray數據 JSONArray ja3 = JSONArray.fromObject(employee); System.out.println("JSONArray對象數據格式:"); System.out.println(ja1.toString()); System.out.println(ja2.toString()); System.out.println(ja3.toString()); // 構造Json數據,包括一個map和一個Employee對象 jo.put("map", ja1); jo.put("employee", ja2); System.out.println("\n最終構造的JSON數據格式:"); System.out.println(jo.toString()); return jo.toString(); } /** * 解析Json數據 * * @param jsonString Json數據字符串 */ public static void ParseJson(String jsonString) { // 以employee爲例解析,map相似 JSONObject jb = JSONObject.fromObject(jsonString); JSONArray ja = jb.getJSONArray("employee"); List<Employee> empList = new ArrayList<Employee>(); // 循環添加Employee對象(可能有多個) for (int i = 0; i < ja.size(); i++) { Employee employee = new Employee(); employee.setName(ja.getJSONObject(i).getString("name")); employee.setSex(ja.getJSONObject(i).getString("sex")); employee.setAge(ja.getJSONObject(i).getInt("age")); empList.add(employee); } System.out.println("\n將Json數據轉換爲Employee對象:"); for (int i = 0; i < empList.size(); i++) { Employee emp = empList.get(i); System.out.println("name: " + emp.getName() + " sex: " + emp.getSex() + " age: " + emp.getAge()); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ParseJson(BuildJson()); } } 複製代碼 運行結果以下 5、與org.json比較 json-lib和org.json的使用幾乎是相同的,我總結出的區別有兩點: 1. org.json比json-lib要輕量得多,前者沒有依賴任何其餘jar包,然後者要依賴ezmorph和commons的lang、logging、beanutils、collections等組件 2. json-lib在構造bean和解析bean時比org.json要方便的多,json-lib可直接與bean互相轉換,而org.json不能直接與bean相互轉換而須要map做爲中轉,若將bean轉爲json數據,首先須要先將bean轉換爲map再將map轉爲json,比較麻煩。 總之,仍是那句話—適合本身的纔是最好的,你們要按需選取使用哪一種方法進行解析。最後給你們介紹兩款解析Json數據的工具:一是在線工具JSON Edit(http://braincast.nl/samples/jsoneditor/);另外一個是Eclipse的插件JSON Tree Analyzer,都很好用,推薦給你們使用! Xml代碼 收藏代碼 <?xml version="1.0" encoding="UTF-8"?> <result> <status>1</status> <!-- 帶中括號的Json數據 --> <info> [{"Student":{"userName":"張三","age":"25","address":"中國大陸","Email":"zhangsan@sina.com"}},{"Student":{"userName":"李四","age":"26","address":"中國臺灣","Email":"lisi@sina.com"}}] </info> </result> Java代碼 收藏代碼 package com.org.entity; import java.io.Serializable; /** *@Author:liangjilong *@Date:2013-10-30 *@Version:1.0 *@Email:liangjilong51job@qq.com *@Description: */ public class Student implements Serializable{ private String userName; private String age; private String address; private String Email; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return Email; } public void setEmail(String email) { Email = email; } } Java代碼 收藏代碼 package com.org.domain; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.org.entity.Student; /** * @Author:liangjilong * @Date:2013-10-30 * @Version:1.0 * @Email:liangjilong51job@qq.com * @Description:解析XML裏面帶中括號的JSON數組的數據 * http://bbs.csdn.net/topics/380187164 */ @SuppressWarnings("all") public class DoMain { public static void main(String[] args) throws Exception { testJson(); String fileName="src/stu.xml"; File file=new File(fileName); Document doc=Jsoup.parse(file,"utf-8"); if(doc!=null){ //使用Jsoup去解析xml的info節點的Json數據 String info=doc.select("info").text().toString(); int start = info.indexOf("["); String newJson = info.substring(start, info.lastIndexOf("]")+1);//組裝成新的Json數據 //json-lib-2.2.3-jdk15.jar JSONArray jsonArr=JSONArray.fromObject(newJson); JSONObject objRoot=null; /** * 遍歷Json數據 */ for(int i=0,l=jsonArr.size();i<l;i++){ objRoot=jsonArr.getJSONObject(i); Object obj=objRoot.get("Student");//Student節點 JSONObject jsonObj=JSONObject.fromObject(obj); /** * 方法1、根據key獲取value值 */ System.out.println(jsonObj.get("userName")+"\t"+jsonObj.get("age")+"\t"+jsonObj.get("address")+jsonObj.get("Email")); System.out.println("=================================================================="); /** * 方法2、根據對象化獲取值 */ Student stu=(Student)jsonObj.toBean(jsonObj,Student.class); System.out.println(stu.getUserName()+"\t"+stu.getAge()+"\t"+stu.getAddress()+"\t"+stu.getEmail()); } } } /** * 文件處理 * @param content * @param filePath * @return */ public static boolean write(String content, String filePath) { boolean flag = true; try { Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "utf-8")); out.write("\n" + content); out.close(); } catch (Exception ex) { ex.printStackTrace(); return false; } return flag; } /** * JsonObject,JsonPrimitive,JsonObject的使用 * */ private static void testJson() { JsonObject jsonObj = new JsonObject(); JsonArray jsonArr = new JsonArray(); JsonObject json_Obj = new JsonObject(); json_Obj.add("key1", new JsonPrimitive("value")); json_Obj.add("key2", new JsonPrimitive(1)); json_Obj.add("key3", new JsonPrimitive(false)); jsonArr.add(json_Obj); jsonObj.add("arr", jsonArr); //獲取帶有中括號數組的Json數據 System.out.println("str:\t"+jsonObj.toString()); System.out.println("key=\t"+jsonObj.get("arr")); } }