Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第65章、JSON數據解析(從零開始學Android)

第65章、JSON數據解析(從零開始學Android)

編輯:Android技術基礎

JSON定義:(javascript object Notation的簡稱)一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性,可以在不同平台間進行數據交換。

1、JSON特點:

(1)json數據是一系列鍵值對的集合;
(2)json已經被大多數開發人員,在網絡數據的傳輸當中應用非常廣泛;
(3)json相對於xml來講解析稍微方便一些。

2、JSON與XML比較

(1)json和xml的數據可讀性基本相同;
(2)json和xml同樣擁有豐富的解析手段;
(3)json相對於xml來講,數據體積小;
(4)json與javascrpit的交互更加方便;
(5)json對數據的描述性相對較差; 
(6)JSON的速度要遠遠快於XML。

一、設計界面

1、布局文件

打開activity_main.xml文件。
輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout   
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:orientation="vertical" >  
  7.   
  8.     <Button  
  9.         android:id="@+id/save"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:text="保存JSON文件" />  
  13.       
  14.     <Button  
  15.         android:id="@+id/read"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:text="讀取JSON文件" />  
  19.   
  20. </LinearLayout>  


二、程序文件

打開“src/com.genwoxue.filejson/MainActivity.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.filejson;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.InputStream;  
  8. import java.io.PrintStream;  
  9. import java.util.ArrayList;  
  10. import java.util.HashMap;  
  11. import java.util.Iterator;  
  12. import java.util.List;  
  13. import java.util.Map;  
  14. import org.json.JSONArray;  
  15. import org.json.JSONException;  
  16. import org.json.JSONObject;  
  17. import android.os.Bundle;  
  18. import android.os.Environment;  
  19. import android.view.View;  
  20. import android.view.View.OnClickListener;  
  21. import android.widget.Button;  
  22. import android.widget.Toast;  
  23. import android.app.Activity;  
  24.   
  25. public class MainActivity extends Activity {  
  26.   
  27.       
  28.     private Button btnSave=null;  
  29.     private Button btnRead=null;  
  30.     private File file=null;  
  31.     private static final String FILENAME="json.txt";  
  32.     private StringBuffer info=null;  
  33.       
  34.     private String bookName[]=new String[]{"跟我學Android","從零開始學Android"};  
  35.     private String author[]=new String[]{"蔣老夫子","蔣老夫子"};  
  36.     private String publisher[]=new String[]{"人民郵電出版社","清華大學出版社"};  
  37.       
  38.     @Override  
  39.     protected void onCreate(Bundle savedInstanceState) {  
  40.           
  41.         super.onCreate(savedInstanceState);  
  42.         setContentView(R.layout.activity_main);  
  43.         btnSave=(Button)super.findViewById(R.id.save);  
  44.         btnRead=(Button)super.findViewById(R.id.read);  
  45.           
  46.         btnSave.setOnClickListener(new OnClickListener(){  
  47.             public void onClick(View v)  
  48.             {    
  49.                 PrintStream ps=null;  
  50.                   
  51.                 JSONArray bookArray=new JSONArray();  
  52.                   
  53.                 for(int i=0;i<MainActivity.this.bookName.length;i++){  
  54.                     JSONObject object=new JSONObject();  
  55.                     try {  
  56.                         object.put("bookname", MainActivity.this.bookName[i]);  
  57.                         object.put("author",MainActivity.this.author[i]);  
  58.                         object.put("publisher",MainActivity.this.publisher[i]);  
  59.                     } catch (JSONException e) {  
  60.                         e.printStackTrace();  
  61.                     }  
  62.                     bookArray.put(object);  
  63.                 }  
  64.                   
  65.                 //判斷外部存儲卡是否存在  
  66.                 if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
  67.                     Toast.makeText(getApplicationContext(), "讀取失敗,SD存儲卡不存在!", Toast.LENGTH_LONG).show();    
  68.                     return;  
  69.                 }  
  70.                   
  71.                 //初始化File  
  72.                 String path=Environment.getExternalStorageDirectory().toString()  
  73.                         +File.separator  
  74.                         +"genwoxue"  
  75.                         +File.separator  
  76.                         +FILENAME;  
  77.                 file=new File(path);  
  78.                   
  79.                 //如果當前文件的父文件夾不存在,則創建genwoxue文件夾  
  80.                 if(!file.getParentFile().exists())  
  81.                     file.getParentFile().mkdirs();  
  82.                   
  83.                 try {  
  84.                     ps=new PrintStream(new FileOutputStream(file));  
  85.                     ps.print(bookArray.toString());  
  86.                 } catch (FileNotFoundException e) {  
  87.                     e.printStackTrace();  
  88.                 } finally{  
  89.                     if(ps!=null)  
  90.                         ps.close();  
  91.                 }  
  92.                   
  93.             }  
  94.         });  
  95.           
  96.           
  97.         btnRead.setOnClickListener(new OnClickListener(){  
  98.             public void onClick(View v)  
  99.             {    
  100.                 info=new StringBuffer();  
  101.                   
  102.                 //判斷外部存儲卡是否存在  
  103.                 if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
  104.                     Toast.makeText(getApplicationContext(), "讀取失敗,SD存儲卡不存在!", Toast.LENGTH_LONG).show();    
  105.                     return;  
  106.                 }  
  107.                   
  108.                 //判斷文件是否存在  
  109.                 String path=Environment.getExternalStorageDirectory().toString()+File.separator+"genwoxue"+File.separator+FILENAME;  
  110.                 file=new File(path);  
  111.                   
  112.                   
  113.                 if(!file.exists()){  
  114.                     Toast.makeText(getApplicationContext(), "XML文件不存在!", Toast.LENGTH_LONG).show();    
  115.                     return;  
  116.                 }  
  117.                   
  118.                 //解析JSON文件  
  119.                 try {  
  120.                     InputStream input=new FileInputStream(file);  
  121.                       
  122.                     //InputStream轉換為字符串  
  123.                      StringBuffer buffer = new StringBuffer();     
  124.                      byte[]  b = new byte[4096];  
  125.                      int n;  
  126.                      while ((n = input.read(b))!= -1){     
  127.                          buffer.append(new String(b,0,n));     
  128.                      }    
  129.                        
  130.                     //JSON解析  
  131.                     List<Map<String,Object>> books=MainActivity.this.parseJson(buffer.toString());  
  132.                     Iterator<Map<String,Object>> iter=books.iterator();  
  133.                       
  134.                     //遍歷列表,獲取書籍信息  
  135.                     while(iter.hasNext()){  
  136.                         Map<String,Object> map=iter.next();  
  137.                         info.append(map.get("bookname")).append("☆☆☆\n");  
  138.                         info.append(map.get("author")).append("☆☆☆\n");  
  139.                         info.append(map.get("publisher")).append("☆☆☆\n");  
  140.                     }  
  141.                 }catch(Exception e){  
  142.                     e.printStackTrace();  
  143.                 }  
  144.                   
  145.                 Toast.makeText(getApplicationContext(), info.toString(), Toast.LENGTH_LONG).show();    
  146.                   
  147.             }  
  148.         });  
  149.           
  150.     }  
  151.   
  152.       
  153.     /* 
  154.      * 定義JSON解析方法parseJson() 
  155.      */  
  156.     public List<Map<String,Object>> parseJson(String s) throws Exception{  
  157.         List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();  
  158.         JSONArray array=new JSONArray(s);  
  159.         for(int i=0;i<array.length();i++){  
  160.             Map<String,Object> map=new HashMap<String,Object>();  
  161.             JSONObject object=array.getJSONObject(i);  
  162.             map.put("bookname",object.getString("bookname"));  
  163.             map.put("author", object.getString("author"));  
  164.             map.put("publisher", object.getString("publisher"));  
  165.             list.add(map);  
  166.         }  
  167.         return list;  
  168.     }  
  169. }  

三、配置文件

打開“AndroidManifest.xml”文件。

然後輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.genwoxue.filejson"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="15" />  
  10.     <span style="color:#ff0000;"><strong><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>  
  11.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></strong>  
  12. </span>    <application  
  13.         android:allowBackup="true"  
  14.         android:icon="@drawable/ic_launcher"  
  15.         android:label="@string/app_name"  
  16.         android:theme="@style/AppTheme" >  
  17.         <activity  
  18.             android:name="com.genwoxue.filejson.MainActivity"  
  19.             android:label="@string/app_name" >  
  20.             <intent-filter>  
  21.                 <action android:name="android.intent.action.MAIN" />  
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.     </application>  
  26.   
  27. </manifest>  

注意:由於要進行讀寫外部存儲卡操作,故而需要在AndroidManifest.xml文件中添加兩項權限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

四、運行結果

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved