当前位置: 代码迷 >> JavaScript >> Android解析JSON形式(一)服务器端生成JSON数据
  详细解决方案

Android解析JSON形式(一)服务器端生成JSON数据

热度:200   发布时间:2013-03-06 16:20:31.0
Android解析JSON方式(一)服务器端生成JSON数据

JSON数据格式的定义:

        JSON的全称是:JavaScript Object Notation,是一种轻量级的数据交换格式。它构建于两种结构:

        1、"名称/值" 对的集合(a collection of name / value pairs)。不同的语言中,它被理解为对象(Object),记录(Record),结构(struct),字典(Dictionary),哈希表(HashTable),有键列表(Keyed list),或者关联数组(Associative array)。

        2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。


JSON数据格式的特点:

       JSON对象时一个无序的" '名称/值' 对"的集合,一个对象以“{”(左括号)开始, 以"}"(右括号)结束,每个"名称"后跟一个":"(冒号),名称/值 对之间使用","(逗号)分隔。

       如:

           {

                     "name":"jackson",

                     "age":100

            }

           

          稍微复杂一点的情况,数组是值的有序集合,一个数组以“[”(左中括号)开始,以"]"(右中括号)结束。值之间使用","(逗号)分隔。

        如:

           {

                       "studengs":

                       [

                                         {"name": "jackson", "age": 100},

                                         {"name": "michael", "age": 51},

                       ]

           }

           


首先,我们搭建一个服务器的工程:JsonProject这个项目,工程目录结构:


源代码:

Person.java

package com.json.domain;

public class Person {
	private int id;
	private String name;
	private String address;
	
	public Person() {
		super();
	}
	public Person(int id, String name, String addrss) {
		super();
		this.id = id;
		this.name = name;
		this.address = addrss;
	}
	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;
	}
	@Override
	public String toString() {
		return "Person [addrss=" + address + ", id=" + id + ", name=" + name
				+ "]";
	}
	
}


JsonService.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() {
	}
	
	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;
	}
}

JsonServlet.java

package com.json.servlet;

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();
	}

}



web.xml中servlet映射

<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>JsonServlet</servlet-name>
    <servlet-class>com.json.servlet.JsonServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>JsonServlet</servlet-name>
    <url-pattern>/servlet/JsonServlet</url-pattern>
  </servlet-mapping>

我们通过浏览器

访问地址一:http://wulianghuan-pc:8080/JsonProject/servlet/JsonServlet?action_flag=person

输出以下结果:

{"persons":{"address":"上海黄浦区","id":1001,"name":"jack"}}


访问地址二:http://wulianghuan-pc:8080/JsonProject/servlet/JsonServlet?action_flag=persons

输出以下结果:

{"persons":[{"address":"上海黄浦区","id":1001,"name":"jack"},{"addrss":"上海闵行区","id":1002,"name":"rose"},{"address":"上海黄浦区","id":1003,"name":"mick"}]}


访问地址三:http://wulianghuan-pc:8080/JsonProject/servlet/JsonServlet?action_flag=listString

输出以下结果:

{"persons":["北京","上海","湖南"]}


访问地址四:http://wulianghuan-pc:8080/JsonProject/servlet/JsonServlet?action_flag=listMap

输出以下结果:

{"persons":[{"id":1001,"address":"北京","name":"jack"},{"id":1001,"address":"上海","name":"rose"}]}