`
ithinkfeed
  • 浏览: 91634 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android开发-Json解析

 
阅读更多

      Android开发过程中,数据传输是难免的,一般组织数据有两种方式:xml格式和json格式。两者解析都非常方便,而且解析工具也都很多,这里不多作比较。

      下面就Json格式的解析做一个比较实用的分析:

       1) 解析Json格式的数据

       2) 解析单个对象

       3) 解析对象的集合 

 

一 大前提--什么是Json ?

1.如果不知道什么是Json,先扫一下盲

1)JSON:JavaScript Object Notation

2)  JSON数据是一系列键值对的集合

3)官方网址:www.json.org, 去看看就什么都明白了

 

2.Json vs xml

1) JSON和XML可读性基本相同

2)JSON和XML通用拥有丰富的解析手段

3)JSON相对XML来讲体积更小

4)JSON与JavaScript的交互性更加方便

5) JSON对数据的描述性相对较差

 

二 Android 中的JSON解析工具

1.从API level 11 开始(也就是Android3.0),在android.util包下就有了JsonReader 和 JsonWriter两个帮助类,供我们来解析和使用json。

 

2.Android3.0以下系统的最佳的做法是使用Google的gson类库来解析,其实这也是3.0以后的做法,只是集成了进来,

下载地址:http://code.google.com/p/google-gson/downloads/list

 

3.下载后的jar文件导入到项目中,我相信这大家都会,下面的例子我采用的是gson来解析。

 

三 JSON实战

1. 解析json格式的数据

比如说有一个User对象,他有两个属性:name和age,当然实际情况可能有更多的属性,

那么用json格式表示就是:{name:"Ian", age: "20"},我相信你懂的。

1)自定义JSON帮助类--JsonUtils

Java代码  收藏代码
  1. public class JsonUtils {  
  2.       
  3.     public void parseJson(String jsonData) {  
  4.           
  5.         try {  
  6.             JsonReader reader = new JsonReader(new StringReader(jsonData));  
  7.             reader.beginArray();  
  8.             while (reader.hasNext()) {  
  9.                 reader.beginObject();  
  10.                 while(reader.hasNext()) {  
  11.                     String tagName = reader.nextName();  
  12.                     if(tagName.equals("name")) {  
  13.                         System.out.println("name--->" + reader.nextString());  
  14.                     } else if(tagName.equals("age")) {  
  15.                         System.out.println("age--->" + reader.nextString());  
  16.                     }  
  17.                 }  
  18.                 reader.endObject();  
  19.             }  
  20.             reader.endArray();  
  21.         } catch (IOException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.           
  25.     }  
  26. }  
 

 

2) Activity代码

 

Java代码  收藏代码
  1. public class MainActivity extends Activity {  
  2.     private Button btnStart;  
  3.     private String jsonDataUser = "{\"name\":\"Ian\",\"age\":20}";  
  4.   
  5.   
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.           
  10.         btnStart = (Button)findViewById(R.id.btnStart);  
  11.         btnStart.setOnClickListener(new BtnStartSetOnClickListener());  
  12.           
  13.           
  14.     }  
  15.       
  16.     private class BtnStartSetOnClickListener implements OnClickListener {  
  17.         @Override  
  18.         public void onClick(View v) {  
  19.             JsonUtils jsonUtils = new JsonUtils();  
  20.             jsonUtils.parseJson(jsonData);  
  21.         }  
  22.     }  
  23. }   

 就这么几行代码,在Console上就可以看到解析输出的信息了,是不是很简单呢?

 

 

2. 解析对象

1)上面解析的是字符串形式,如果我们定义一个User对象会怎么样呢?

 

Java代码  收藏代码
  1. public class User {  
  2.     private String name;  
  3.     private int age;  
  4.     public String getName() {  
  5.         return name;  
  6.     }  
  7.     public void setName(String name) {  
  8.         this.name = name;  
  9.     }  
  10.     public int getAge() {  
  11.         return age;  
  12.     }  
  13.     public void setAge(int age) {  
  14.         this.age = age;  
  15.     }  
  16. }  
 

2) 解析方法

 

Java代码  收藏代码
  1. public void parseUserFromJson(String jsonData) {  
  2.       
  3.     Gson gson =new Gson();  
  4.     User user = gson.fromJson(jsonData, User.class);  
  5.     System.out.println("name---------->" + user.getName());  
  6.     System.out.println("age---------->" + user.getAge());     
  7.       
  8. }  
 

是不是更简单了呢?

 

3. 解析集合

1)如果不是单个User,而是ArrayList<User>,那么该怎么解析啊,因为这个太常见了。

要解决这个问题,得先弄明白集合用json该怎么表示,简单来讲“{}”表示一个对象,“[]”表示一个集合,集合里面可以有多个对象,这样表示[{},{},{}]。OK,那么看实战代码,

json数据:

 

Java代码  收藏代码
  1. private String jsonDataUsers = "[{\"name\":\"Jack\",\"age\":20},{\"name\":\"Tom\",\"age\":22},{\"name\":\"Ian\",\"age\":20}]";  

 解析代码:

 

Java代码  收藏代码
  1. public void parseUserFromJson(String jsonData) {  
  2.   
  3.         Type typeList = new TypeToken<ArrayList<User>>(){}.getType();  
  4.         Gson gson = new Gson();  
  5.         LinkedList<User> users = gson.fromJson(jsonData, typeList);  
  6.         for(Iterator<User> iterator = users.iterator(); iterator.hasNext();) {  
  7.             User user = iterator.next();  
  8.             System.out.println("name---------->" + user.getName());  
  9.             System.out.println("age---------->" + user.getAge());  
  10.         }  
  11.     }  
 

我们可以看到,只是多了一行“Type typeList = new TypeToken<ArrayList<User>>(){}.getType();”,就可以解析出List来,然后迭代List就可以得到整个数据

了,真的很方便,还等什么呢,赶快试试看吧!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics