您的位置:首页 > 移动开发 > Android开发

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数据。

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: