JSON解析

Android开发中,与服务器交互80%是通过JSON方式传输数据,JSON也是基于纯文本的数据格式,JSON具有跨平台的优势,相对XML,JSON解析起来更方便,简单,解析数据所消耗的流量也会比XML少,而且JSON有一些好的第三方库文件,已为开发者封装好了。

JSON语法规则:

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对

名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:比如;"firstName":"John"

JSON 值

JSON 值可以是:
  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

比如值是基本类型

 

  1. {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}   

{}代表是一个对象,这些都是简单的key/value形式,如果用对象来表示的话:

  1. public class Info {  
  2.     public String city;  
  3.     public String street;  
  4.     public int postcode;  
  5. }  

在这个JavaBean中并没有使用get,set方法,因为get,set方法是使用反射做的,比较慢,这是JSON最简单的方式,key/value形式,我们知道json有三种方式,一种是key/value,key/Object,key/array,现在讲讲key/Object形式:

比如:

  1. {"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}}   

这里有2个对象,一个是最外面的,一个是address:它也是一个对象,我们说了{}就代表一个对象,因此 首先写里面的对象,然后再写外面的对象,代码如下:

Info.java

  1. package com.jackie.json;  
  2.   
  3. public class Info {  
  4.     public String city;  
  5.     public String street;  
  6.     public int postcode;  
  7. }  

Person.java

  1. /** 
  2.  * {"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}}  
  3.  * @author carpool 
  4.  * 
  5.  */  
  6. public class Person {  
  7.         public String name;  
  8.         public Info info;  
  9. }  

JSON解析代码:

  1. </pre><pre class="java" name="code">String jsonString = getJsonString();  
  2.         try {  
  3.             JSONObject jb = new JSONObject(jsonString);  //最先解析最外层的{} 
  4.             Person p = new Person();  
  5.             Info info  = new Info();  
  6.             info.city = jb.getJSONObject("address").getString("city");  
  7.             info.street = jb.getJSONObject("address").getString("street");  
  8.             info.postcode = jb.getJSONObject("address").getInt("postcode");  
  9.             p.info = info;  
  10.             p.name = jb.getString("name");  
  11.         } catch (JSONException e) {  
  12.             e.printStackTrace();  
  13.         }  


现在还剩下一个种形式JSON,就是key/array,比如:

  1. {  
  2.     "people": [  
  3.         {  
  4.             "firstName""Brett",  
  5.             "lastName""McLaughlin",  
  6.             "email""aaaa"  
  7.         },  
  8.         {  
  9.             "firstName""Jason",  
  10.             "lastName""Hunter",  
  11.             "email""bbbb"  
  12.         },  
  13.         {  
  14.             "firstName""Elliotte",  
  15.             "lastName""Harold",  
  16.             "email""cccc"  
  17.         }  
  18.     ]  
  19. }  

我们知道{}代表的是一个对象,[]代表的是数组,表示数组中存放了很多对象,对象之间用逗号(,)分开,

这个用对象封装一般有二种形式,一是直接用集合把解析的对象存储起来,二是用一个类封装一个集合,集合的对象就是上面所解析的对象即可

第一种方式:

People.java

  1. public class People {  
  2.     public String firstName;  
  3.     public String lastName;  
  4.     public String email;  
  5. }  


解析:

  1. String jsonString = getJsonString(); //JSON串  
  2.         try {  
  3.             JSONObject jb = new JSONObject(jsonString);  //最先解析最外层的{} 
  4.             JSONArray ja = jb.getJSONArray("people");  
  5.             ArrayList<People> ps = new ArrayList<People>();  
  6.             for(int i = 0; i < ja.length(); i++){  
  7.                 People p = new People();  
  8.                 p.email = ja.getJSONObject(i).getString("email");  
  9.                 p.firstName = ja.getJSONObject(i).getString("firstName");  
  10.                 p.lastName = ja.getJSONObject(i).getString("lastName");  
  11.                 ps.add(p);  
  12.             }  
  13.         } catch (JSONException e) {  
  14.             e.printStackTrace();  
  15.         }  


第二种写法:

  1. public class MultiplePeople {  
  2.     public List<People> peoples;  
  3. }  

  1. String jsonString = getJsonString();//json串  
  2.         try {  
  3.             JSONObject jb = new JSONObject(jsonString);  
  4.             JSONArray ja = jb.getJSONArray("people");  
  5.             MultiplePeople multiplePeople = new MultiplePeople();  
  6.             List<People> ps = new ArrayList<People>();  
  7.             for(int i = 0; i < ja.length(); i++){  
  8.                 People p = new People();  
  9.                 p.email = ja.getJSONObject(i).getString("email");  
  10.                 p.firstName = ja.getJSONObject(i).getString("firstName");  
  11.                 p.lastName = ja.getJSONObject(i).getString("lastName");  
  12.                 ps.add(p);  
  13.             }  
  14.             multiplePeople.peoples = ps;  
  15.         } catch (JSONException e) {  
  16.             e.printStackTrace();  
  17.         }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值