解析JSON資料系列1:在網頁上顯示Json資料
Json的全稱:JavaScriptObjectNotation
Json的兩種構建結構:“名稱/值”對的集合、值的有序列表。
移動客戶端(android和iphone)接收返回的資料和平臺無關,平臺可以是Java、.net或者php。
移動客戶端請求伺服器端,一般是採用Json這種輕量級的形式。
JSON的資料格式:
JSON物件是一個無序的“‘名稱/值’對”集合。
一個物件以“{”(左括號)開始,“}”(右括號)結束。
每個“名稱”後跟一個“:”(冒號);“‘名稱/值’對”之間使用“,”(逗號)分隔。
如:{
"name":"jackson",
"age":100
}
陣列是值(value)的有序集合。一個數組以“[”(左括號)開始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔
如:{
“students”:
[
{"name":"jackson","age":100},
{"name":"michael","age":51}
]
}
這個例子採用的是伺服器端:(jsp+servlet)(生成Json的字串),客戶端:解析Json資料。在網頁上顯示Json的字串。
整體思路:新建一個web工程,定義一個實體類Person,在裡面定義三個欄位,定義它的建構函式,get、set方法,toString方法。定義一個JsonService類,在裡面定義getPerson方法返回一個Person物件,定義getlistPerson方法返回一個裝有Person型別的List物件,定義getListString方法返回一個裝有字串型別的List物件,定義getListMaps方法返回一個裝有Map型別的List物件。定義一個JsonTools類,在裡面寫一個構建Json字串的方法。定義一個TestJson類,在裡面定義main方法,在這個方法中呼叫createJsonString返回Json物件並輸出。定義一個servlet類JsonAction,在裡面把doGet方法中的程式碼改為this.doPost(request, response),在doPost方法中新增請求和接收的方式,呼叫createJsonString返回Json物件並輸出。
Person.java檔案:
public class Person { private int id; private String name; private String adress; public Person(int id, String name, String adress) { super(); this.id = id; this.name = name; this.adress = adress; } 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 getAdress() { return adress; } public void setAdress(String adress) { this.adress = adress; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", adress=" + adress + "]"; } }
JsonService.java檔案:
public class JsonService {
public JsonService() {
// TODO Auto-generated constructor stub
}
public Person getPerson(){
Person person =new Person(1001,"jack","beijing");
return person;
}
public List<Person> getlistPerson(){
List<Person> list=new ArrayList<Person>();
Person person1=new Person(1001,"jack","beijing");
Person person2=new Person(1001,"rose","shanghai");
list.add(person1);
list.add(person2);
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>();
map1.put("id", 1001);
map1.put("name", "jack");
map1.put("address", "beijing");
Map<String, Object> map2=new HashMap<String, Object>();
map2.put("id", 1002);
map2.put("name", "rose");
map2.put("address", "shanghai");
list.add(map1);
list.add(map2);
return list;
}
}
JsonTools.java檔案:
public class JsonTools {
public JsonTools() {
// TODO Auto-generated constructor stub
}
/**
*
* @param key 表示json字串的頭資訊
* @param value 是對解析的集合的型別
* @return
*/
public static String createJsonString(String key,Object value){
JSONObject jsonObject=new JSONObject();
jsonObject.put(key, value);
return jsonObject.toString();
}
}
TestJson.java檔案:public class TestJson {
public TestJson() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
String msg="";
JsonService service=new JsonService();
// Person person=service.getPerson();
// msg=JsonTools.createJsonString("person", person);
// System.out.println(msg);
msg=JsonTools.createJsonString("persons", service.getListMaps());
System.out.println(msg);
}
}
JsonAction.java檔案:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
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=JsonTools.createJsonString("person", service.getlistPerson());
out.println(jsonString);
out.flush();
out.close();
}