在前面的两讲中,我们讲解了JSON数据格式的一些基本知识,以及做一些小Demo,这一讲我们在前面的基础上来做一个综合的可扩展的Demo,主要是针对Android客户端解析服务端传递过来的JSON数据。整个Demo所作的操作如下图所示
1. 服务端
服务端我们需要用到的解析JSON的库是用org.json --> Java --> JSON-lib项目中的库json-lib-2.4-jdk15.jar,这个库还需要附带几个依赖包:commons-beanutils.jar, commons-httpclient.jar, commons- lang.jar, ezmorph.jar,morph-1.0.1.jar。具体的包我会放在源码的lib目录下,读者可以自己去下载。
查看这个项目的api文档:http://json-lib.sourceforge.net/apidocs/jdk15/index.html,我们主要使用的是JSON JSONArray JSONObject JSONSerializer 这几个类,JSONObject这个类可以发现它与org.json这个项目的用法很类似。
1) 先做一个服务端的小实验,就是在服务端实现对Java对象转换成JSON数据格式并且在控制台输出。
Person.java 普通的Person类
package com.json.domain; public class Person { private int id; private String name; private String address; public Person(int id, String name, String address) { super(); this.id = id; this.name = name; this.address = address; } public Person() { // TODO Auto-generated constructor stub } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
JsonService.java 服务于Person,给Person对象赋予各种属性
JsonTools.java 工具类package com.json.service; 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() { // TODO Auto-generated constructor stub } public Person getPerson(){ Person person = new Person(23, "AHuier", "XIAMEN"); return person; } public List<Person> getListPerson(){ List<Person> list = new ArrayList<Person>(); Person person1 = new Person(1001, "AHuier1", "Beijing"); Person person2 = new Person(1002, "AHuier2", "shenzheng"); list.add(person1); list.add(person2); return list; } public List<String> getListString(){ List<String> list = new ArrayList<String>(); list.add("Hello"); list.add("World"); list.add("AHuier"); return list; } public List<Map<String, Object>> getListMaps(){ List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("color", "red"); map1.put("id", 01); map1.put("name", "Polu"); listMap.add(map1); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("id", 07); map2.put("color", "green"); map2.put("name", "Zark"); listMap.add(map2); return listMap; } }
JsonTest.java 测试类package com.json.tools; import net.sf.json.JSONObject; /** * @author xukunhui * 工具类,这里专门处理Java对象转Json字符串的功能 */ public class JsonTools { public JsonTools() { // TODO Auto-generated constructor stub } /** * @param key : JSON 名值对中的的名字 * @param value :JSON 名值对中的值,值可以有多种类型 * @return */ // 接受对象转换为JSON数据格式并且作为字符串输出. public static String createJsonString(String key, Object value){ JSONObject jsonObject = new JSONObject(); jsonObject.put(key, value); return jsonObject.toString(); //就可以转换成Json数据格式 } }
package com.json.test; import com.json.domain.Person; import com.json.service.JsonService; import com.json.tools.JsonTools; /** * @author xukunhui * 测试类,利用JSON讲Java对象转换成JSON数据格式,并且在控制台中输出 */ public class JsonTest { public JsonTest() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String msg = ""; JsonService service = new JsonService(); // 带有三个属性的person对象 Person person = service.getPerson(); msg = JsonTools.createJsonString("person", person); System.out.printl