Android笔记之 以JSON方式与服务器通信

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)我们还需要在该工程中导入JSONAPI数据包json-lib-2.2.2-jdk15.jar

JSONAPI中,提供了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对象具有idint)、nameString)和ageint)三个属性。

最后,我们可以创建一个继承自HttpServletJsonAction类,并实现其中的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>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值