天天看點

json格式解析的全過程

  1. package com.zml.pojo;  
  2. public class Person {  
  3.     String name;  
  4.     String sex;  
  5.     String QQ;  
  6.     String contact;  
  7.     public Person() {  
  8.         // TODO Auto-generated constructor stub  
  9.     }  
  10.     public Person(String name, String sex, String qQ, String contact) {  
  11.         super();  
  12.         this.name = name;  
  13.         this.sex = sex;  
  14.         QQ = qQ;  
  15.         this.contact = contact;  
  16.     }  
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.     public String getSex() {  
  24.         return sex;  
  25.     }  
  26.     public void setSex(String sex) {  
  27.         this.sex = sex;  
  28.     }  
  29.     public String getQQ() {  
  30.         return QQ;  
  31.     }  
  32.     public void setQQ(String qQ) {  
  33.         QQ = qQ;  
  34.     }  
  35.     public String getContact() {  
  36.         return contact;  
  37.     }  
  38.     public void setContact(String contact) {  
  39.         this.contact = contact;  
  40.     }  
  41.     @Override  
  42.     public String toString() {  
  43.         return "Person [name=" + name + ", sex=" + sex + ", QQ=" + QQ  
  44.                 + ", contact=" + contact + "]";  
  45.     }  
  46. }  

2.我寫了一個工具類,用來生成上述的四種類型的資料;

[java]  view plain  copy  

json格式解析的全過程
json格式解析的全過程
  1. package com.zml.utils;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import com.zml.pojo.Person;  
  7. public class DataUtil {  
  8.     public static Person getPerson() {  
  9.         return new Person("鄭明亮", "男", "1072307340", "15733100573");  
  10.     }  
  11.     public static List<Person> getPersons() {  
  12.         List<Person> list = new ArrayList<Person>();  
  13.         list.add(getPerson());  
  14.         list.add(new Person("張三", "男", "123456789", "98765432"));  
  15.         list.add(new Person("李四", "女", "762348234", "12312124324"));  
  16.         return list;  
  17.     }  
  18.     public static List<String>    getStrings(){  
  19.         List<String>list = new ArrayList<String>();  
  20.         list.add("鄭明亮");  
  21.         list.add("張三");  
  22.         list.add("李四");  
  23.         return list;  
  24.     }  
  25.     public static List<Map<String,Object>> getMaps(){  
  26.         List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  
  27.         Map<String,Object> map = new HashMap<String, Object>();  
  28.         map.put("name","鄭明亮" );  
  29.         map.put("blog", "blog.csdn.net/zml_2015");  
  30.         map.put("person", getPerson());  
  31.         list.add(map);  
  32.         return list;  
  33.     }  
  34. }  

3.接下來就是寫json資料類型的轉換類了

[java]  view plain  copy  

json格式解析的全過程
json格式解析的全過程
  1. package com.zml.utils;  
  2. import net.sf.json.JSONObject;  
  3. public class JsonTools {  
  4.     public static String  createJsonString(String key,Object value){  
  5.         JSONObject jsonObject=new JSONObject();  
  6.         jsonObject.put(key, value);  
  7.         return jsonObject.toString();  
  8.         }  
  9. }  

4.進行測試,看是否将上述4種資料轉換為了json的資料類型

[java]  view plain  copy  

json格式解析的全過程
json格式解析的全過程
  1. package com.zml.test;  
  2. import com.zml.utils.DataUtil;  
  3. import com.zml.utils.JsonTools;  
  4. public class testjson {  
  5.     public static void main(String[] args) {  
  6.             String jsonString;  
  7.             jsonString = JsonTools.createJsonString("person",DataUtil.getPerson());  
  8.             System.out.println(jsonString);           
  9.             jsonString = JsonTools.createJsonString("persons",DataUtil.getPersons());  
  10.             System.out.println(jsonString);           
  11.             jsonString = JsonTools.createJsonString("strings",DataUtil.getStrings());  
  12.             System.out.println(jsonString);       
  13.             jsonString = JsonTools.createJsonString("maps",DataUtil.getMaps());  
  14.             System.out.println(jsonString);       
  15.         }  
  16. }  
json格式解析的全過程

5.測試成功後,建立Servlet類,以友善将json資料傳輸給用戶端

[java]  view plain  copy  

json格式解析的全過程
json格式解析的全過程
  1. <p>package com.zml.test;</p><p>import java.io.IOException;  
  2. import java.io.PrintWriter;</p><p>import javax.servlet.ServletException;  
  3. import javax.servlet.http.HttpServlet;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpServletResponse;</p><p>import com.zml.utils.DataUtil;  
  6. import com.zml.utils.JsonTools;</p><p>  
  7. public class JsonServlet extends HttpServlet {</p><p>   
  8.  public JsonServlet() {  
  9.   super();  
  10.  }</p><p>   
  11.  public void destroy() {  
  12.   super.destroy(); // Just puts "destroy" string in log  
  13.   // Put your code here  
  14.  }</p><p>   
  15.  public void doGet(HttpServletRequest request, HttpServletResponse response)  
  16.    throws ServletException, IOException {  
  17.   this.doPost(request, response);</p><p> }</p><p>   
  18.  public void doPost(HttpServletRequest request, HttpServletResponse response)  
  19.    throws ServletException, IOException {</p><p>  response.setContentType("text/html;charset=utf-8");  
  20.   request.setCharacterEncoding("utf-8");  
  21.   response.setCharacterEncoding("utf-8");  
  22.   PrintWriter out = response.getWriter();</p><p>  String jsonString="";  
  23.   String  actionString = request.getParameter("action");  
  24.   if (actionString.equals("person")) {  
  25.    jsonString = JsonTools.createJsonString("person",DataUtil.getPerson());</p><p>  } else if (actionString.equals("persons")) {  
  26.    jsonString = JsonTools.createJsonString("persons",DataUtil.getPersons());</p><p>  } else if (actionString.equals("strings")) {  
  27.    jsonString = JsonTools.createJsonString("strings",DataUtil.getStrings());</p><p>  } else if (actionString.equals("maps")) {  
  28.    jsonString = JsonTools.createJsonString("maps",DataUtil.getMaps());  
  29.   }  
  30.   out.write(jsonString);</p><p> }</p><p>   
  31.  public void init() throws ServletException {  
  32.   // Put your code here  
  33.  }</p><p>}  
  34. </p>  

 通過網址通路可得到的JSON資料:

json格式解析的全過程
json格式解析的全過程
json格式解析的全過程
json格式解析的全過程

二、用戶端解析json資料

這裡暫時隻貼出重要的解析部分,

[java]  view plain  copy  

json格式解析的全過程
json格式解析的全過程
  1. package com.zml.util;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import org.json.JSONArray;  
  8. import org.json.JSONException;  
  9. import org.json.JSONObject;  
  10. import com.zml.pojo.Person;  
  11. public class JsonTools {  
  12.     public static Person getPerson(String key, String jsonString) {  
  13.         Person person = new Person();  
  14.         // 将json字元串轉換成json對象  
  15.         try {  
  16.             JSONObject jsonObject = new JSONObject(jsonString);  
  17.             // 将json對象根據key(person),拿到對應的value(Person對象)值  
  18.             JSONObject jsonObject2 = jsonObject.getJSONObject(key);  
  19.             // 将拿到的對象set到一個person對象中  
  20.             person.setName(jsonObject2.getString("name"));  
  21.             person.setSex(jsonObject2.getString("sex"));  
  22.             person.setQQ(jsonObject2.getString("QQ"));  
  23.             person.setContact(jsonObject2.getString("contact"));  
  24.         } catch (JSONException e) {  
  25.             // TODO Auto-generated catch block  
  26.             e.printStackTrace();  
  27.         }  
  28.         return person;  
  29.     }  
  30.     public static List<Person> getPersons(String key, String jsonString) {  
  31.         List<Person> list = new ArrayList<Person>();  
  32.         JSONObject jsonObject;  
  33.         try {  
  34.             jsonObject = new JSONObject(jsonString);  
  35.             JSONArray Persons = jsonObject.getJSONArray(key);  
  36.             for (int i = 0; i < Persons.length(); i++) {  
  37.                 Person person = new Person();  
  38.                 JSONObject jsonObject2 = Persons.getJSONObject(i);  
  39.                 person.setName(jsonObject2.getString("name"));  
  40.                 person.setSex(jsonObject2.getString("sex"));  
  41.                 person.setQQ(jsonObject2.getString("QQ"));  
  42.                 person.setContact(jsonObject2.getString("contact"));  
  43.                 list.add(person);  
  44.             }  
  45.         } catch (JSONException e) {  
  46.             // TODO Auto-generated catch block  
  47.             e.printStackTrace();  
  48.         }  
  49.         return list;  
  50.     }  
  51.     public static List<String> getStrings(String key, String jsonString) {  
  52.         List<String> list = new ArrayList<String>();  
  53.         try {  
  54.             JSONObject jsonObject = new JSONObject(jsonString);  
  55.             JSONArray StringArray = jsonObject.getJSONArray(key);  
  56.             for (int i = 0; i < StringArray.length(); i++) {  
  57.                 String str = StringArray.getString(i);  
  58.                 list.add(str);  
  59.             }  
  60.         } catch (Exception e) {  
  61.             // TODO: handle exception  
  62.         }  
  63.         return list;  
  64.     }  
  65.     public static List<Map<String, Object>> getMaps(String key,  
  66.             String jsonString) {  
  67.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  68.         try {  
  69.             JSONObject jsonObject = new JSONObject(jsonString);  
  70.             JSONArray mapsArray = jsonObject.getJSONArray(key);  
  71.             for (int i = 0; i < mapsArray.length(); i++) {  
  72.                 JSONObject jsonObject2 = mapsArray.getJSONObject(i);  
  73.                 Map<String, Object> map = new HashMap<String, Object>();  
  74.                 // 檢視Map中的鍵值對的key值  
  75.                 Iterator<String> iterator = jsonObject2.keys();  
  76.                 while (iterator.hasNext()) {  
  77.                     String json_key = iterator.next();  
  78.                     Object json_value = jsonObject2.get(json_key);  
  79.                     if(json_value==null){  
  80.                         //當鍵值對中的value為空值時,将value置為空字元串;  
  81.                         json_value="";  
  82.                     }  
  83.                     map.put(json_key, json_value);  
  84.                 }  
  85.                 list.add(map);  
  86.             }  
  87.         } catch (Exception e) {  
  88.             // TODO: handle exception  
  89.         }  
  90.         return list;  
  91.     }  
  92. }  

需要注意的是上述,用戶端和伺服器端雖然都用到了JSONObject類,但是引用的不是一個jar包中的内容哦;用戶端的是引用的 org.json.JSONObject;而伺服器端引用的是net.sf.json.JSONObject;