JAVA CODE:html
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.json.domain.Person; public class JsonService { public JsonService() { } public Person getPerson(){ Person person = new Person(1001,"jack","上海黃浦區"); return person; } public List<Person> getListPerson(){ List<Person> list = new ArrayList<Person>(); Person person1 = new Person(1001,"jack","上海黃浦區"); Person person2 = new Person(1002,"rose","上海閔行區"); Person person3 = new Person(1003,"mick","上海黃浦區"); list.add(person1); list.add(person2); list.add(person3); return list; } public List<String> getListString(){ List<String> list = new ArrayList<String>(); list.add("北京"); list.add("上海"); list.add("湖南"); return list; } public List<Map<String,Object>> getListMaps(){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); Map<String,Object> map1 = new HashMap<String, Object>(); Map<String,Object> map2 = new HashMap<String, Object>(); map1.put("id", 1001); map1.put("name", "jack"); map1.put("address", "北京"); map2.put("id", 1001); map2.put("name", "rose"); map2.put("address", "上海"); list.add(map1); list.add(map2); return list; } }
通過以下的JSON序列化後:java
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.json.bean.Person; /** * 完成對JSON數據的解析 * @author wulianghuan * */ public class JsonTools { public JsonTools() { } public static String createjsonString (String key, Object value) { JSONObjcet jsonObject=new JSONObject(); jsonObject.put(key, value); return jsonObject.toString(); ) /** * 獲取對象數據 * @param key * @param jsonString * @return */ public static Person getPerson(String key,String jsonString){ Person person = new Person(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONObject personObject = jsonObject.getJSONObject(key); person.setId(personObject.getInt("id")); person.setName(personObject.getString("name")); person.setAddress(personObject.getString("address")); } catch (JSONException e) { e.printStackTrace(); } return person; } /** * 獲取對象數組數據 * @param key * @param jsonString * @return */ public static List<Person> getPersons(String key,String jsonString){ List<Person> list = new ArrayList<Person>(); try { JSONObject jsonObject = new JSONObject(jsonString); //返回json的數組 JSONArray jsonArray = jsonObject.getJSONArray(key); for(int i=0;i<jsonArray.length();i++){ JSONObject jsonObject2 = jsonArray.getJSONObject(i); Person person = new Person(); person.setId(jsonObject2.getInt("id")); person.setName(jsonObject2.getString("name")); person.setAddress(jsonObject2.getString("address")); list.add(person); } } catch (JSONException e) { e.printStackTrace(); } return list; } /** * 獲取String數組數據 * @param key * @param jsonString * @return */ public static List<String> getList(String key,String jsonString){ List<String> list = new ArrayList<String>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for(int i=0;i<jsonArray.length();i++){ String msg = jsonArray.getString(i); list.add(msg); } } catch (JSONException e) { e.printStackTrace(); } return list; } /** * 獲取對象的Map集合數據 * @param key * @param jsonString * @return */ public static List<Map<String,Object>> getListMap(String key,String jsonString){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for(int i=0;i<jsonArray.length();i++){ JSONObject jsonObject2 = jsonArray.getJSONObject(i); Map<String,Object> map = new HashMap<String, Object>(); Iterator<String> iterator = jsonObject2.keys(); while(iterator.hasNext()){ String json_key = iterator.next(); Object json_value = jsonObject2.get(json_key); if(json_value==null){ json_value = ""; } map.put(json_key, json_value); } list.add(map); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }
Serlet:json
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.json.service.JsonService; import com.json.tools.JsonTools; public class JsonServlet extends HttpServlet { private JsonService service; /** * Constructor of the object. */ public JsonServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String jsonString = ""; String action_flag = request.getParameter("action_flag"); if(action_flag.equals("person")){ jsonString = JsonTools.createJsonString("person", service.getPerson()); }else if(action_flag.equals("persons")){ jsonString = JsonTools.createJsonString("persons", service.getListPerson()); }else if(action_flag.equals("listString")){ jsonString = JsonTools.createJsonString("listString", service.getListString()); }else if(action_flag.equals("listMap")){ jsonString = JsonTools.createJsonString("listMap", service.getListMaps()); } out.println(jsonString); out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { service = new JsonService(); } }
每一個方法返回的JSONSTR以下:數組
getPerson(): dom
{"persons":{"address":"上海黃浦區","id":1001,"name":"jack"}}post
getListPerson():this
{"persons":[{"address":"上海黃浦區","id":1001,"name":"jack"},{"addrss":"上海閔行區","id":1002,"name":"rose"},{"address":"上海黃浦區","id":1003,"name":"mick"}]}spa
getListString():code
{"persons":["北京","上海","湖南"]}orm
getListMap():
{"persons":[{"id":1001,"address":"北京","name":"jack"},{"id":1001,"address":"上海","name":"rose"}]}
而在.Net中對好比下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections; namespace NetJSON { public partial class JSON : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string flag = Request["action_flag"]; string jsonStr = ""; switch (flag) { case "person": var p = new Person(); p.Id = 100; p.Name = "張三"; p.Address = "北京朝陽"; jsonStr = JsonHelper.JsonSerializer<Person>(p); break; case "persons": List<Person> persons = new List<Person>(); persons.Add(new Person { Id = 101, Name = "李四", Address = "北京昌平" }); persons.Add(new Person { Id = 102, Name = "王五", Address = "北京順義" }); persons.Add(new Person { Id = 103, Name = "趙六", Address = "天津南開" }); jsonStr = JsonHelper.JsonSerializer<List<Person>>(persons); break; case "stringList": List<string> strs = new List<string>(); strs.Add("china"); strs.Add("beijing"); strs.Add("chaoyang"); jsonStr = JsonHelper.JsonSerializer<List<string>>(strs); break; case "listMap": List<Hashtable> listMap = new List<Hashtable>(); Hashtable ht = new Hashtable(); ht.Add("Id", 203); ht.Add("Name", "老趙"); ht.Add("Age", 36); listMap.Add(ht); ht = new Hashtable(); ht.Add("Id", 204); ht.Add("Name", "老張"); ht.Add("Age", 46); ht.Add("Married", true); listMap.Add(ht); List<SortedDictionary<string, object>> list = new List<SortedDictionary<string, object>>(); SortedDictionary<string, object> dict = new SortedDictionary<string, object>(); dict.Add("Id", 334); dict.Add("Name", "XYZ"); list.Add(dict); dict = new SortedDictionary<string, object>(); dict.Add("Id", 334); dict.Add("Address", "XYZ"); dict.Add("Married", false); list.Add(dict); jsonStr = JsonHelper.JsonSerializer<List<SortedDictionary<string, object>>>(list); break; } Response.Write(jsonStr); Response.End(); } } public class Person { public int Id { get; set; } public string Name { get; set; } public string Address { get; set; } } }
using System.Runtime.Serialization.Json; using System.IO; using System.Text; namespace NetJSON { /// <summary> /// JSON序列化和反序列化輔助類 /// </summary> public class JsonHelper { /// <summary> /// JSON序列化 /// </summary> public static string JsonSerializer<T>(T t) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, t); string jsonString = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return jsonString; } /// <summary> /// JSON反序列化 /// </summary> public static T JsonDeserialize<T>(string jsonString) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); T obj = (T)ser.ReadObject(ms); return obj; } } }
person:
{"Address":"北京朝陽","Id":100,"Name":"張三"}
persons:
[{"Address":"北京昌平","Id":101,"Name":"李四"},{"Address":"北京順義","Id":102,"Name":"王五"},{"Address":"天津南開","Id":103,"Name":"趙六"}]
stringList:
["china","beijing","chaoyang"]
listMap:
[[{"Key":"Id","Value":201},{"Key":"Name","Value":"老趙"}],[{"Key":"Id","Value":203},{"Key":"Birthday","Value":"\/Date(232214400000+0800)\/"},{"Key":"Married","Value":true}]]
注意其中.Net中Hashtable或者Dictionary返回的字符串與Java的不一樣。