Android解析JSON方式---- 很好的例子

Android解析JSON方式

客户端解析SON数据

这篇我们来建立一个Android项目,来访问服务器取得JSON格式数据,并解析JSON数据格式,输出到日志控制台。

我们建立的项目目录结构如下:

运行的界面截图:

当我们分别点击四个按钮,可以看到控制台的输出日志:

以下是源代码:

main.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent" 
  5.     android:orientation="vertical" > 
  6.     <Button   
  7.         android:id="@+id/person" 
  8.         android:layout_width="fill_parent" 
  9.         android:layout_height="wrap_content" 
  10.         android:text="解析person数据"   
  11.         android:onClick="click"/> 
  12.     <Button   
  13.         android:id="@+id/persons" 
  14.         android:layout_width="fill_parent" 
  15.         android:layout_height="wrap_content" 
  16.         android:text="解析persons数据"   
  17.         android:onClick="click"/> 
  18.     <Button   
  19.         android:id="@+id/listString" 
  20.         android:layout_width="fill_parent" 
  21.         android:layout_height="wrap_content" 
  22.         android:text="解析listString数据"   
  23.         android:onClick="click"/> 
  24.     <Button   
  25.         android:id="@+id/listMap" 
  26.         android:layout_width="fill_parent" 
  27.         android:layout_height="wrap_content" 
  28.         android:text="解析listMap数据"   
  29.         android:onClick="click"/> 
  30. </LinearLayout> 

MainActivity.java

  1. package com.json.activity; 
  2.  
  3. import java.util.List; 
  4. import java.util.Map; 
  5. import android.app.Activity; 
  6. import android.os.Bundle; 
  7. import android.util.Log; 
  8. import android.view.View; 
  9. import com.json.bean.Person; 
  10. import com.json.util.HttpUtils; 
  11. import com.json.util.JsonTools; 
  12.  
  13. public class MainActivity extends Activity { 
  14.     private static String PATH = "http://192.168.56.1:8080/JsonProject/servlet/JsonServlet"
  15.     private static final String TAG = "MainActivity"
  16.     @Override 
  17.     public void onCreate(Bundle savedInstanceState) { 
  18.         super.onCreate(savedInstanceState); 
  19.         setContentView(R.layout.main); 
  20.     } 
  21.     public void click(View v){ 
  22.         switch (v.getId()) { 
  23.         case R.id.person: 
  24.             String path1=PATH+"?action_flag=person"; 
  25.             String jsonString1 = HttpUtils.getJsonContent(path1); 
  26.             Person person = JsonTools.getPerson("person", jsonString1); 
  27.             Log.i(TAG, person.toString()); 
  28.             break; 
  29.         case R.id.persons: 
  30.             String path2=PATH+"?action_flag=persons"; 
  31.             String jsonString2 = HttpUtils.getJsonContent(path2); 
  32.             List<Person> list2 = JsonTools.getPersons("persons", jsonString2); 
  33.             Log.i(TAG, list2.toString());     
  34.             break; 
  35.         case R.id.listString: 
  36.             String path3=PATH+"?action_flag=listString"; 
  37.             String jsonString3 = HttpUtils.getJsonContent(path3); 
  38.             List<String> list3 = JsonTools.getList("listString", jsonString3); 
  39.             Log.i(TAG, list3.toString()); 
  40.              
  41.             break; 
  42.         case R.id.listMap: 
  43.             String path4=PATH+"?action_flag=listMap"; 
  44.             String jsonString4 = HttpUtils.getJsonContent(path4); 
  45.             List<Map<String,Object>> list4 = JsonTools.getListMap("listMap", jsonString4); 
  46.             Log.i(TAG, list4.toString()); 
  47.             break; 
  48.         } 
  49.     } 

Person.java

  1. package com.json.bean; 
  2.  
  3. public class Person { 
  4.     private int id; 
  5.     private String name; 
  6.     private String address; 
  7.      
  8.     public Person() { 
  9.         super(); 
  10.     } 
  11.     public Person(int id, String name, String addrss) { 
  12.         super(); 
  13.         this.id = id
  14.         this.name = name
  15.         this.address = addrss
  16.     } 
  17.     public int getId() { 
  18.         return id; 
  19.     } 
  20.     public void setId(int id) { 
  21.         this.id = id
  22.     } 
  23.     public String getName() { 
  24.         return name; 
  25.     } 
  26.     public void setName(String name) { 
  27.         this.name = name
  28.     } 
  29.     public String getAddress() { 
  30.         return address; 
  31.     } 
  32.     public void setAddress(String address) { 
  33.         this.address = address
  34.     } 
  35.     @Override 
  36.     public String toString() { 
  37.         return "Person [addrss=" + address + "id=" + id + "name=" + name 
  38.                 + "]"; 
  39.     } 
  40.      

HttpUtils.java

  1. package com.json.util; 
  2.  
  3. import java.io.ByteArrayOutputStream; 
  4. import java.io.IOException; 
  5. import java.io.InputStream; 
  6. import java.net.HttpURLConnection; 
  7. import java.net.MalformedURLException; 
  8. import java.net.URL; 
  9.  
  10. public class HttpUtils { 
  11.  
  12.     public HttpUtils() { 
  13.     } 
  14.      
  15.     public static String getJsonContent(String path){ 
  16.         try { 
  17.             URL url = new URL(path); 
  18.             HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
  19.             connection.setConnectTimeout(3000); 
  20.             connection.setRequestMethod("GET"); 
  21.             connection.setDoInput(true); 
  22.             int code = connection.getResponseCode(); 
  23.             if(code == 200){ 
  24.                 return changeInputStream(connection.getInputStream()); 
  25.             } 
  26.         } catch (MalformedURLException e) { 
  27.             e.printStackTrace(); 
  28.         } catch (IOException e) { 
  29.             e.printStackTrace(); 
  30.         } 
  31.         return null; 
  32.     } 
  33.  
  34.     /** 
  35.      * 将一个输入流转换成指定编码的字符串   
  36.      * @param inputStream 
  37.      * @return 
  38.      */ 
  39.     private static String changeInputStream(InputStream inputStream) { 
  40.         String jsonString = ""
  41.         ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
  42.         int len = 0
  43.         byte[] data = new byte[1024]; 
  44.         try { 
  45.             while((len=inputStream.read(data))!=-1){ 
  46.                 outputStream.write(data,0,len); 
  47.             } 
  48.             jsonString = new String(outputStream.toByteArray()); 
  49.         } catch (IOException e) { 
  50.             e.printStackTrace(); 
  51.         } 
  52.         return jsonString; 
  53.     } 

JsonTools.java

  1. package com.json.util; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.HashMap; 
  5. import java.util.Iterator; 
  6. import java.util.List; 
  7. import java.util.Map; 
  8.  
  9. import org.json.JSONArray; 
  10. import org.json.JSONException; 
  11. import org.json.JSONObject; 
  12. import com.json.bean.Person; 
  13.  
  14. /** 
  15.  * 完成对JSON数据的解析 
  16.  * @author wulianghuan 
  17.  * 
  18.  */ 
  19. public class JsonTools { 
  20.  
  21.     public JsonTools() { 
  22.          
  23.     } 
  24.      
  25.     /** 
  26.      * 获取对象数据 
  27.      * @param key 
  28.      * @param jsonString 
  29.      * @return 
  30.      */ 
  31.     public static Person getPerson(String key,String jsonString){ 
  32.         Person person = new Person(); 
  33.         try { 
  34.             JSONObject jsonObject = new JSONObject(jsonString); 
  35.             JSONObject personObject = jsonObject.getJSONObject(key); 
  36.             person.setId(personObject.getInt("id")); 
  37.             person.setName(personObject.getString("name")); 
  38.             person.setAddress(personObject.getString("address")); 
  39.         } catch (JSONException e) { 
  40.             e.printStackTrace(); 
  41.         } 
  42.         return person; 
  43.     } 
  44.      
  45.     /** 
  46.      * 获取对象数组数据 
  47.      * @param key 
  48.      * @param jsonString 
  49.      * @return 
  50.      */ 
  51.     public static List<Person> getPersons(String key,String jsonString){ 
  52.         List<Person> list = new ArrayList<Person>(); 
  53.         try { 
  54.             JSONObject jsonObject = new JSONObject(jsonString); 
  55.             //返回json的数组 
  56.             JSONArray jsonArray = jsonObject.getJSONArray(key); 
  57.             for(int i=0;i<jsonArray.length();i++){ 
  58.                 JSONObject jsonObject2 = jsonArray.getJSONObject(i); 
  59.                 Person person = new Person(); 
  60.                 person.setId(jsonObject2.getInt("id")); 
  61.                 person.setName(jsonObject2.getString("name")); 
  62.                 person.setAddress(jsonObject2.getString("address")); 
  63.                 list.add(person); 
  64.             } 
  65.         } catch (JSONException e) { 
  66.             e.printStackTrace(); 
  67.         } 
  68.          
  69.         return list; 
  70.     } 
  71.     /** 
  72.      * 获取String数组数据 
  73.      * @param key 
  74.      * @param jsonString 
  75.      * @return 
  76.      */ 
  77.     public static List<String> getList(String key,String jsonString){ 
  78.         List<String> list = new ArrayList<String>(); 
  79.         try { 
  80.             JSONObject jsonObject = new JSONObject(jsonString); 
  81.             JSONArray jsonArray = jsonObject.getJSONArray(key); 
  82.             for(int i=0;i<jsonArray.length();i++){ 
  83.                 String msg = jsonArray.getString(i); 
  84.                 list.add(msg); 
  85.             } 
  86.         } catch (JSONException e) { 
  87.             e.printStackTrace(); 
  88.         } 
  89.         return list; 
  90.     } 
  91.     /** 
  92.      * 获取对象的Map集合数据 
  93.      * @param key 
  94.      * @param jsonString 
  95.      * @return 
  96.      */ 
  97.     public static List<Map<String,Object>> getListMap(String key,String jsonString){ 
  98.         List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); 
  99.         try { 
  100.             JSONObject jsonObject = new JSONObject(jsonString); 
  101.             JSONArray jsonArray = jsonObject.getJSONArray(key); 
  102.             for(int i=0;i<jsonArray.length();i++){ 
  103.                 JSONObject jsonObject2 = jsonArray.getJSONObject(i); 
  104.                 Map<String,Object> map = new HashMap<String, Object>(); 
  105.                 Iterator<String> iterator = jsonObject2.keys(); 
  106.                 while(iterator.hasNext()){ 
  107.                     String json_key = iterator.next(); 
  108.                     Object json_value = jsonObject2.get(json_key); 
  109.                     if(json_value==null){ 
  110.                         json_value = ""
  111.                     } 
  112.                     map.put(json_key, json_value); 
  113.                 } 
  114.                 list.add(map); 
  115.             } 
  116.         } catch (JSONException e) { 
  117.             // TODO Auto-generated catch block 
  118.             e.printStackTrace(); 
  119.         } 
  120.          
  121.         return list; 
  122.     } 

更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值