Android笔记之 以JSON方式与服务器通信
2014-06-30 23:57
519 查看
1.JSON数据结构
在JSON中有两种数据结构:对象和数组。
1.1对象
在JSON中,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),冒号后是该名称的值,多个“名称:值”之间使用 “,”(逗号)分隔开来。名称需要使用双引号括起来,值如果是字符串则必须用双引号括起来,如果是数值型则不需要。其结构示意图如图1所示。
图1 JSON对象结构示意图
如下的代码是一个简单的JSON对象示例:
{
"id":0001,
"name":"xiaoming",
"age":19
}
1.2数组
在JSON中,数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用 “,”(逗号)分隔开来。其结构示意图如图2所示。
图2 JSON数组结构示意图
如下的代码是一个简单的JSON数组示例:
["苹果","香蕉","菠萝"]
1.3值的类型
在JSON的对象和数组结构中,value值不仅可以是数字、字符串等简单数据类型,还可以是对象、数组等,如图3所示。
图3 JSON中值的类型
因此,我们可以使用对象和数组的组合构成复杂的数据结构。如下的代码使用对象结构定义了一个“students”对象,在“students”对象中包含了一个学生数组,而学生数组中的值又是JSON对象。
{
"students":
[
{"name":"liming","age":19},
{"name":"zhangsan","age":20}
]
}
2.在服务器端生成JSON数据
通常,客户端在请求服务器数据时,服务器可以使用XML文档、JSON数据或HTML的形式将数据发送给客户端。
那么如何在服务器端生成JSON数据呢?首先需要完成以下两个准备工作。
(1)我们需要使用MyEclipse创建了一个Web Project,这里我将该工程命名为了“JsonDemoProject”,用来模拟服务器端的Web服务。
(2)我们还需要在该工程中导入JSON的API数据包json-lib-2.2.2-jdk15.jar。
在JSON的API中,提供了JSONObject类,通过调用JSONObject类的put(Object key, Object value)方法,可以将一个Object对象以键值对的形式存入JSONObject对象。通过调用JSONObject类的toString()方法,则可以将JSONObject对象转化为JSON数据。
如下的代码创建了一个JsonTools类,并实现了静态方法createJsonString(),用来生成JSON数据。
通过使用该方法,我们可以很方便的将各种数据传递进来,并将其转化成JSON数据。比如,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:
其中,Person对象具有id(int)、name(String)和age(int)三个属性。
最后,我们可以创建一个继承自HttpServlet的JsonAction类,并实现其中的doPost()方法,用来响应客户端对服务器的请求。具体如下:
在JSON中有两种数据结构:对象和数组。
1.1对象
在JSON中,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),冒号后是该名称的值,多个“名称:值”之间使用 “,”(逗号)分隔开来。名称需要使用双引号括起来,值如果是字符串则必须用双引号括起来,如果是数值型则不需要。其结构示意图如图1所示。
图1 JSON对象结构示意图
如下的代码是一个简单的JSON对象示例:
{
"id":0001,
"name":"xiaoming",
"age":19
}
1.2数组
在JSON中,数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用 “,”(逗号)分隔开来。其结构示意图如图2所示。
图2 JSON数组结构示意图
如下的代码是一个简单的JSON数组示例:
["苹果","香蕉","菠萝"]
1.3值的类型
在JSON的对象和数组结构中,value值不仅可以是数字、字符串等简单数据类型,还可以是对象、数组等,如图3所示。
图3 JSON中值的类型
因此,我们可以使用对象和数组的组合构成复杂的数据结构。如下的代码使用对象结构定义了一个“students”对象,在“students”对象中包含了一个学生数组,而学生数组中的值又是JSON对象。
{
"students":
[
{"name":"liming","age":19},
{"name":"zhangsan","age":20}
]
}
2.在服务器端生成JSON数据
通常,客户端在请求服务器数据时,服务器可以使用XML文档、JSON数据或HTML的形式将数据发送给客户端。
那么如何在服务器端生成JSON数据呢?首先需要完成以下两个准备工作。
(1)我们需要使用MyEclipse创建了一个Web Project,这里我将该工程命名为了“JsonDemoProject”,用来模拟服务器端的Web服务。
(2)我们还需要在该工程中导入JSON的API数据包json-lib-2.2.2-jdk15.jar。
在JSON的API中,提供了JSONObject类,通过调用JSONObject类的put(Object key, Object value)方法,可以将一个Object对象以键值对的形式存入JSONObject对象。通过调用JSONObject类的toString()方法,则可以将JSONObject对象转化为JSON数据。
如下的代码创建了一个JsonTools类,并实现了静态方法createJsonString(),用来生成JSON数据。
public class JsonTools { /* * Function : 生成JSON数据 * Param : key Json数据的键值 * object 要生成Json数据的内容 * Retuen : JSON数据 */ public static String createJsonString(String key, Object value) { JSONObject jsonObject = new JSONObject(); //创建一个JSONObject对象 jsonObject.put(key, value); //往JSONObject对象中填入内容 return jsonObject.toString(); //生成JSON数据并返回 } }
通过使用该方法,我们可以很方便的将各种数据传递进来,并将其转化成JSON数据。比如,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:
/* * Function : 获取Person对象列表 * */ public List<Person> getListPerson() { List<Person> list = new ArrayList<Person>(); Person person1 = new Person(0001, "liming", 19); Person person2 = new Person(0002, "zhangsan", 20); list.add(person1); list.add(person2); return list; }
其中,Person对象具有id(int)、name(String)和age(int)三个属性。
最后,我们可以创建一个继承自HttpServlet的JsonAction类,并实现其中的doPost()方法,用来响应客户端对服务器的请求。具体如下:
<p style="margin:0in;font-size:9.0pt"><span style="font-family:"Courier New""> public void doPost(HttpServletRequestrequest, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out =response.getWriter(); List<Person> listPerson =jsonService.getListPerson(); String str = null; String action_flag =request.getParameter("action_flag"); //</span><span style="font-family:宋体">获取</span><span style="font-family:"Courier New"">URL</span><span style="font-family:宋体">参数</span><span style="font-family:"Courier New""> if(action_flag.equals("persons")) { str =JsonTools.createJsonString("persons", listPerson); } out.println(str); out.flush(); out.close(); }</span></p>
相关文章推荐
- android 学习笔记之 post get 方式与 服务器JSON通信
- 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 【转】Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Android与服务器通信的方法之一(json)效率不高安全性不好
- android客户端向服务器通信的三种方式的使用
- 【Android笔记】Android与服务器通信 http和socket两种形式
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Android笔记 get方式提交数据到服务器 避免乱码 demo
- Android入门:通过JSON数据与服务器进行通信
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 【Android笔记】Android的三种网络通信方式
- Android入门:通过JSON数据与服务器进行通信
- Socket 通信原理 -- Android客户端和服务器以TCP&&UDP方式互通
- Android与SSH框架服务器通信方式 .
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 【Android笔记】Android操作HTTP实现与服务器通信
- 【Android笔记】Android与服务器数据库通信的方法