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"}]}