Json数据的处理

经过上几章的学习,相信同学们对XML解析已经得心应手了,但今天我们要解析Json数据,因为Json数据占用数据量小,因此在Android中主要数据通信还是以Json为主,而且Json数据可以跟Android进行AJAX互动,相当方便哦,好了,不多说了,看图跟代码:

先上图:

首先定义了Json数据:

"persons"  
  1. "id""1""status":"大徙弟""name""孙悟空""tool""金箍棒""number""杀死了50只妖怪" },   
  2. "id""2""status":"二徙弟""name""猪八戒""tool""九齿钉耙""number""杀死了43只妖怪" },  
  3. "id""3""status":"三徙弟""name""沙和尚""tool""降妖宝杖""number""杀死了33只妖怪"  
  4. ]}   

接下来就是定义javaBean了,对于java开发来说,javaBean可以很方便地存储和管理数据

public class Person  
  1.  
  2.     private String id;  
  3.     private String status;  
  4.     private String name;  
  5.     private String tool;  
  6.     private String number;  
  7.       
  8.   
  9.     public String getId()  
  10.      
  11.         return id;  
  12.      
  13.     public void setId(String id)  
  14.      
  15.         this.id id;  
  16.      
  17.     public String getStatus()  
  18.      
  19.         return status;  
  20.      
  21.     public void setStatus(String status)  
  22.      
  23.         this.status status;  
  24.      
  25.     public String getName()  
  26.      
  27.         return name;  
  28.      
  29.     public void setName(String name)  
  30.      
  31.         this.name name;  
  32.      
  33.     public String getTool()  
  34.      
  35.         return tool;  
  36.      
  37.     public void setTool(String tool)  
  38.      
  39.         this.tool tool;  
  40.      
  41.     public String getNumber()  
  42.      
  43.         return number;  
  44.      
  45.     public void setNumber(String number)  
  46.      
  47.         this.number number;  
  48.      
  49.     @Override  
  50.     public String toString()  
  51.      
  52.         return "Person [id=" id ", status=" status ", name=" name  
  53.                 ", tool=" tool ", number=" number "]" 
  54.      
  55.       
  56.  

 

接下来就是 Json的处理了,定义了一个JsonHandler类

import java.io.BufferedReader;  
  1. import java.io.InputStream;  
  2. import java.io.InputStreamReader;  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.json.JSONArray;  
  7. import org.json.JSONObject;  
  8.   
  9. public class JsonHandler  
  10.  
  11.     private InputStream input;  
  12.     private List<Person> persons;  
  13.     private Person person;  
  14.   
  15.     public JsonHandler()  
  16.      
  17.      
  18.   
  19.     public JsonHandler(InputStream input)  
  20.      
  21.         this.input input;  
  22.      
  23.   
  24.     public void setInput(InputStream input)  
  25.      
  26.         this.input input;  
  27.      
  28.   
  29.     public List<Person> getPersons()  
  30.      
  31.         persons new ArrayList<Person>();  
  32.         try  
  33.          
  34.             //自定义方法,从输入流中取得字符串   
  35.             String json_str getJsonString(input);  
  36.             //通过字符串生成Json对象   
  37.             JSONObject object new JSONObject(json_str);  
  38.             //将Json对象中的persons数据转换成Json数组   
  39.             JSONArray array object.getJSONArray("persons");  
  40.             //数组长度   
  41.             int length array.length();  
  42.             for (int 0length; i++)  
  43.              
  44.                 //将每一个数组再转换成Json对象   
  45.                 JSONObject obj array.getJSONObject(i);  
  46.   
  47.                 person new Person();  
  48.                 person.setId(obj.getString("id"));  
  49.                 person.setStatus(obj.getString("status"));  
  50.                 person.setName(obj.getString("name"));  
  51.                 person.setTool(obj.getString("tool"));  
  52.                 person.setNumber(obj.getString("number"));  
  53.   
  54.                 persons.add(person);  
  55.   
  56.              
  57.   
  58.             return persons;  
  59.   
  60.         catch (Exception e)  
  61.          
  62.             e.printStackTrace();  
  63.          
  64.   
  65.         return null 
  66.      
  67.   
  68.       
  69.     private String getJsonString(InputStream input) throws Exception  
  70.      
  71.         BufferedReader reader new BufferedReader(new InputStreamReader(input));  
  72.         StringBuilder sb new StringBuilder();  
  73.         for (String reader.readLine(); != nullreader.readLine())  
  74.          
  75.             sb.append(s);  
  76.          
  77.   
  78.         return sb.toString();  
  79.      
  80.   
  81.  

OK,到这里数据应该能解析出来了,可以通过测试类来测试一下,呵呵,我还是比较喜欢边测试边做下一步开发

  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3.   
  4. import java.util.List;  
  5.   
  6. import android.os.Environment;  
  7. import android.test.AndroidTestCase;  
  8.   
  9. public class HandlerTest extends AndroidTestCase  
  10.  
  11.       
  12.   
  13.     public void testJsonGetPersons()  
  14.      
  15.   
  16.         // 取得当前SD目录下的文件路径   
  17.         File SD_Files Environment.getExternalStorageDirectory();  
  18.         // 取得persons.xml文件的路径,这里我是存在sdcard/data.json   
  19.         String file_path SD_Files.getName() File.separator "data.json" 
  20.   
  21.         try  
  22.          
  23.             FileInputStream fis new FileInputStream(new File(file_path));  
  24.             JsonHandler jsonHandler new JsonHandler(fis);  
  25.             List<Person> persons jsonHandler.getPersons();  
  26.             System.out.println(persons);  
  27.   
  28.         catch (Exception e)  
  29.          
  30.             e.printStackTrace();  
  31.          
  32.   
  33.      
  34.  

好,测试没问题了,那我们就上主Activity类了

import java.io.File;  
  1. import java.io.FileInputStream;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.os.Environment;  
  10. import android.widget.ListView;  
  11. import android.widget.SimpleAdapter;  
  12.   
  13. public class JsonActivity extends Activity  
  14.  
  15.     private ListView listView;  
  16.     private SimpleAdapter adapter;  
  17.   
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState)  
  20.      
  21.         // TODO Auto-generated method stub   
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.xml_handler);  
  24.   
  25.         listView (ListView) findViewById(R.id.xml_list);  
  26.         try  
  27.          
  28.             // 自完义适配方法   
  29.             getAdapter();  
  30.   
  31.         catch (Exception e)  
  32.          
  33.             e.printStackTrace();  
  34.          
  35.         listView.setAdapter(adapter);  
  36.      
  37.   
  38.     private void getAdapter() throws Exception  
  39.      
  40.         List<Map<String, String>> lists new ArrayList<Map<String, String>>();  
  41.         //取得SD卡目录   
  42.         File SD_Files Environment.getExternalStorageDirectory();  
  43.         //取得文件路径   
  44.         String file_path SD_Files.getName() File.separator "data.json" 
  45.         //Json处理   
  46.         FileInputStream fis new FileInputStream(new File(file_path));  
  47.         JsonHandler jsonHandler new JsonHandler(fis);  
  48.         List<Person> persons jsonHandler.getPersons();  
  49.   
  50.         // 将persons中的数据转换到ArrayList<Map<String,String>>中   
  51.         // String>>中,因为SimpleAdapter要用这个类型的数据进行适配   
  52.         Map<String, String> map;  
  53.         for (Person persons)  
  54.          
  55.             map new HashMap<String, String>();  
  56.   
  57.             map.put("id"p.getId());  
  58.             map.put("status"p.getStatus());  
  59.             map.put("name"p.getName());  
  60.             map.put("tool"p.getTool());  
  61.             map.put("number"p.getNumber());  
  62.   
  63.             lists.add(map);  
  64.          
  65.   
  66.         // HashMap<String, String>中的key   
  67.         String[] from "id""status""name""tool""number" };  
  68.         // list_item.xml中对应的控件ID   
  69.         int[] to R.id.item_id, R.id.item_status, R.id.item_name,  
  70.                 R.id.item_tool, R.id.item_number };  
  71.   
  72.         adapter new SimpleAdapter(thislists, R.layout.handler_list_item,  
  73.                 from, to);  
  74.      
  75.   
  76.  

这里面还定义了几个Layout,也一起送上吧:

xml_handler.xml

<?xml version="1.0" encoding="utf-8"?>  
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:orientation="vertical" android:layout_width="match_parent"  
  3.     android:layout_height="match_parent">  
  4.     <TextView android:textAppearance="?android:attr/textAppearanceMedium"  
  5.         android:layout_width="wrap_content" android:text="唐僧的三个徙弟"  
  6.         android:layout_height="wrap_content" android:id="@+id/textView1"  
  7.         android:paddingLeft="10dip" android:paddingBottom="10dip"></TextView>  
  8.     <ListView android:id="@+id/xml_list" android:layout_height="wrap_content"  
  9.         android:layout_width="match_parent"></ListView>  
  10.   
  11. </LinearLayout>  

handler_list_item.xml

<?xml version="1.0" encoding="utf-8"?>  
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:orientation="vertical" android:layout_width="match_parent"  
  3.     android:layout_height="match_parent" android:paddingLeft="10dip"  
  4.     android:paddingRight="10dip">  
  5.     <LinearLayout android:id="@+id/linearLayout1"  
  6.         android:layout_height="wrap_content" android:layout_width="match_parent">  
  7.         <TextView android:textAppearance="?android:attr/textAppearanceMedium"  
  8.             android:layout_width="wrap_content" android:text="TextView"  
  9.             android:layout_height="wrap_content" android:id="@+id/item_id" android:paddingRight="30dip"></TextView>  
  10.         <TextView android:textAppearance="?android:attr/textAppearanceMedium"  
  11.             android:layout_width="wrap_content" android:text="TextView"  
  12.             android:layout_height="wrap_content" android:id="@+id/item_status" android:paddingRight="30dip"></TextView>  
  13.         <TextView android:textAppearance="?android:attr/textAppearanceMedium"  
  14.             android:layout_width="wrap_content" android:text="TextView"  
  15.             android:layout_height="wrap_content" android:id="@+id/item_name"></TextView>  
  16.     </LinearLayout>  
  17.     <LinearLayout android:id="@+id/linearLayout2"  
  18.         android:layout_height="wrap_content" android:layout_width="match_parent">  
  19.         <TextView android:textAppearance="?android:attr/textAppearanceMedium"  
  20.             android:layout_width="wrap_content" android:text="TextView"  
  21.             android:layout_height="wrap_content" android:id="@+id/item_tool" android:paddingRight="30dip"></TextView>  
  22.         <TextView android:textAppearance="?android:attr/textAppearanceMedium"  
  23.             android:layout_width="wrap_content" android:text="TextView"  
  24.             android:layout_height="wrap_content" android:id="@+id/item_number"></TextView>  
  25.     </LinearLayout>  
  26.   
  27. </LinearLayout>  

好了,Json的数据处理我们也学习完了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值