package com.example.hoteltest;
              import java.io.ByteArrayOutputStream;  
          import java.io.InputStream;  
          import java.net.*;  
          import java.util.ArrayList;  
          import java.util.HashMap;  
          import java.util.List;  
          import java.util.Map;  
          import org.json.JSONArray;  
          import org.json.JSONObject;  
          import android.util.Log;  
                
              public class JSON {  
                
                    
                  /**
                   * 獲取"數組形式"的JSON數據,
                   * 數據形式:[{"id":1,"name":"小豬"},{"id":2,"name":"小貓"}]
                   * @param path  網頁路徑
                   * @return  返回List
                   * @throws Exception
                   */  
                  public static List<Map<String, String>> getJSONArray(String path) throws Exception {  
                      String json = null;  
                      List<Map<String, String>> list = new ArrayList<Map<String, String>>();  
                      Map<String, String> map = null;  
                      URL url = new URL(path);  
                      HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection對象,我們可以從網絡中獲取網頁數據.  
                      conn.setConnectTimeout(5 * 1000);   // 單位是毫秒,設置超時時間為5秒  
                      conn.setRequestMethod("GET");       // HttpURLConnection是通過HTTP協議請求path路徑的,所以需要設置請求方式,可以不設置,因為默認為GET  
                      if (conn.getResponseCode() == 200) {// 判斷請求碼是否是200碼,否則失敗  
                          InputStream is = conn.getInputStream(); // 獲取輸入流  
                          byte[] data = readStream(is);   // 把輸入流轉換成字符數組  
                          json = new String(data);        // 把字符數組轉換成字符串  
                            
                          //數據形式:[{"id":1,"name":"小豬","age":22},{"id":2,"name":"小貓","age":23}]  
                          JSONArray jsonArray = new JSONArray(json); //數據直接為一個數組形式,所以可以直接 用android提供的框架JSONArray讀取JSON數據,轉換成Array  
                
                          for (int i = 0; i < jsonArray.length(); i++) {  
                              JSONObject item = jsonArray.getJSONObject(i); //每條記錄又由幾個Object對象組成  
                              int id = item.getInt("id");     // 獲取對象對應的值  
                              String name = item.getString("name");  
                
                              map = new HashMap<String, String>(); // 存放到MAP里面  
                              map.put("id", id + "");  
                              map.put("name", name);  
                              list.add(map);  
                          }  
                      }  
                
                      // ***********測試數據******************  
                      for (Map<String, String> list2 : list) {  
                          String id = list2.get("id");  
                          String name = list2.get("name");  
                          Log.i("abc", "id:" + id + " | name:" + name);  
                      }  
                
                      return list;  
                  }  
                
                  /**
                   * 獲取"對象形式"的JSON數據,
                   * 數據形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小豬"},{"id":2,"name":"小貓"}]}
                   * @param path  網頁路徑
                   * @return  返回List
                   * @throws Exception
                   */  
                  public static List<Map<String, String>> getJSONObject(String path) throws Exception {  
                      List<Map<String, String>> list = new ArrayList<Map<String, String>>();  
                      Map<String, String> map = null;  
                      URL url = new URL(path);  
                      HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection對象,我們可以從網絡中獲取網頁數據.  
                      conn.setConnectTimeout(5 * 1000);   // 單位是毫秒,設置超時時間為5秒  
                      conn.setRequestMethod("GET");       // HttpURLConnection是通過HTTP協議請求path路徑的,所以需要設置請求方式,可以不設置,因為默認為GET  
                      if (conn.getResponseCode() == 200) {// 判斷請求碼是否是200碼,否則失敗  
                          InputStream is = conn.getInputStream(); // 獲取輸入流  
                          byte[] data = readStream(is);   // 把輸入流轉換成字符數組  
                          String json = new String(data); // 把字符數組轉換成字符串  
                            
                            
                          //數據形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小豬"},{"id":2,"name":"小貓"}]}  
                          JSONObject jsonObject=new JSONObject(json);     //返回的數據形式是一個Object類型,所以可以直接轉換成一個Object  
                          int page=jsonObject.getInt("page");  
                          String type=jsonObject.getString("type");  
                          Log.i("abc", "type:" + type + " |page:" + page);   //測試數據  
                            
                          JSONArray jsonArray = jsonObject.getJSONArray("hotels");//里面有一個數組數據,可以用getJSONArray獲取數組  
                          for (int i = 0; i < jsonArray.length(); i++) {  
                              
                              JSONObject item = jsonArray.getJSONObject(i); // 得到每個對象
                              
                              double distance=item.getDouble("distance");
                              String direction=item.getString("direction");
                              int star_rating=item.getInt("star_rating");
                              String name=item.getString("name");
                              double nightly_rate=item.getDouble("nightly_rate");
                              double promoted_nightly_rate=item.getDouble("promoted_nightly_rate");
                              double total_rate=item.getDouble("total_rate");
                              double longitude=item.getDouble("longitude");
                              String key=item.getString("key");
                              double promoted_total_rate=item.getDouble("promoted_total_rate");
                              String latitude=item.getString("latitude");
                              long master_id=item.getLong("master_id");
                              String thumbnail=item.getString("thumbnail");
                              String street_address=item.getString("street_address");
                              double review_score=item.getDouble("review_score");
                     
                              map = new HashMap<String, String>(); // 存放到MAP里面  
                              map.put("distance", distance + "");  
                              map.put("direction", direction + "");  
                              map.put("star_rating", star_rating + "");  
                              map.put("name", name + "");  
                              map.put("nightly_rate", nightly_rate + "");  
                              map.put("promoted_nightly_rate", promoted_nightly_rate + "");  
                              map.put("total_rate", total_rate + "");  
                              map.put("key", key + "");  
                              map.put("promoted_total_rate", promoted_total_rate + "");  
                              map.put("latitude", latitude + "");  
                              map.put("master_id", master_id + "");  
                              map.put("thumbnail", thumbnail + "");    
                              map.put("street_address", street_address + "");  
                              map.put("review_score", review_score + "");  
                            
                              
                              list.add(map);  
                          }  
                      }  
                
                      // ***********測試數據******************  
                        
                      for (Map<String, String> list2 : list) {  
                          String distance = list2.get("distance");  
                          String direction = list2.get("direction");  
                          String star_rating = list2.get("star_rating");  
                          String name = list2.get("name");  
                          String nightly_rate = list2.get("nightly_rate");  
                          String promoted_nightly_rate = list2.get("promoted_nightly_rate");  
                          String total_rate = list2.get("total_rate");  
                          String key = list2.get("key");  
                          String promoted_total_rate = list2.get("promoted_total_rate");  
                          String latitude = list2.get("latitude");  
                          String master_id = list2.get("master_id");  
                          String thumbnail = list2.get("thumbnail");  
                          String street_address = list2.get("street_address");  
                          String review_score = list2.get("review_score");  
                          System.out.println(distance);
                          System.out.println(direction);
                          System.out.println(star_rating);
                          System.out.println(name);
                          System.out.println(nightly_rate);
                          System.out.println(promoted_nightly_rate);
                          System.out.println(total_rate);
                          System.out.println(key);
                          System.out.println(promoted_total_rate);
                          System.out.println(latitude);
                          System.out.println(master_id);
                          System.out.println(thumbnail);
                          System.out.println(street_address);
                          System.out.println(review_score);
                      }  
                
                      return list;  
                  }  
                    
                    
                  /**
                   * 獲取類型復雜的JSON數據
                   *數據形式:
                      {"name":"小豬",
                       "age":23,
                       "content":{"questionsTotal":2,
                                  "questions": [ { "question": "what's your name?", "answer": "小豬"},{"question": "what's your age", "answer": "23"}]
                                 }
                      }
                   * @param path  網頁路徑
                   * @return  返回List
                   * @throws Exception
                   */  
                  public static List<Map<String, String>> getJSON(String path) throws Exception {  
                      List<Map<String, String>> list = new ArrayList<Map<String, String>>();  
                      Map<String, String> map = null;  
                      URL url = new URL(path);  
                      HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection對象,我們可以從網絡中獲取網頁數據.  
                      conn.setConnectTimeout(5 * 1000);   // 單位是毫秒,設置超時時間為5秒  
                      conn.setRequestMethod("GET");       // HttpURLConnection是通過HTTP協議請求path路徑的,所以需要設置請求方式,可以不設置,因為默認為GET  
                      if (conn.getResponseCode() == 200) {// 判斷請求碼是否是200碼,否則失敗  
                          InputStream is = conn.getInputStream(); // 獲取輸入流  
                          byte[] data = readStream(is);   // 把輸入流轉換成字符數組  
                          String json = new String(data); // 把字符數組轉換成字符串  
                            
                            
                          /*數據形式:
                              {"name":"小豬",
                               "age":23,
                               "content":{"questionsTotal":2,
                                          "questions": [ { "question": "what's your name?", "answer": "小豬"},{"question": "what's your age", "answer": "23"}]
                                         }
                              }
                          */    
                          JSONObject jsonObject=new JSONObject(json);     //返回的數據形式是一個Object類型,所以可以直接轉換成一個Object  
                          String name=jsonObject.getString("name");         
                          int age=jsonObject.getInt("age");  
                          Log.i("abc", "name:" + name + " | age:" + age); //測試數據  
                            
                          JSONObject contentObject=jsonObject.getJSONObject("content");       //獲取對象中的對象  
                          String questionsTotal=contentObject.getString("questionsTotal");    //獲取對象中的一個值  
                          Log.i("abc", "questionsTotal:" + questionsTotal);   //測試數據  
                            
                          JSONArray contentArray=contentObject.getJSONArray("questions");     //獲取對象中的數組  
                          for (int i = 0; i < contentArray.length(); i++) {  
                              JSONObject item = contentArray.getJSONObject(i); // 得到每個對象  
                              String question = item.getString("question");   // 獲取對象對應的值  
                              String answer = item.getString("answer");  
                
                              map = new HashMap<String, String>(); // 存放到MAP里面  
                              map.put("question", question);  
                              map.put("answer", answer);  
                              list.add(map);  
                          }  
                      }  
                
                      // ***********測試數據******************  
                        
                      for (Map<String, String> list2 : list) {  
                          String question = list2.get("question");  
                          String answer = list2.get("answer");  
                          Log.i("abc", "question:" + question + " | answer:" + answer);  
                      }  
                
                      return list;  
                  }  
                    
                    
                    
                    
                  /**
                   * 把輸入流轉換成字符數組
                   * @param inputStream   輸入流
                   * @return  字符數組
                   * @throws Exception
                   */  
                  public static byte[] readStream(InputStream inputStream) throws Exception {  
                      ByteArrayOutputStream bout = new ByteArrayOutputStream();  
                      byte[] buffer = new byte[1024];  
                      int len = 0;  
                      while ((len = inputStream.read(buffer)) != -1) {  
                          bout.write(buffer, 0, len);  
                      }  
                      bout.close();  
                      inputStream.close();  
                
                      return bout.toByteArray();  
                  }  
                
              } 
          posted on 2013-04-22 20:21 姚先進 閱讀(280) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 南阳市| 海宁市| 类乌齐县| 巴塘县| 开封市| 霍州市| 鹿邑县| 弥勒县| 黑龙江省| 当雄县| 鄯善县| 吉首市| 平昌县| 肃南| 和田县| 甘孜| 甘德县| 昭苏县| 仁化县| 天门市| 双鸭山市| 北票市| 张掖市| 东莞市| 东丰县| 横山县| 全椒县| 神木县| 赤峰市| 湘阴县| 辽宁省| 怀来县| 会理县| 留坝县| 达拉特旗| 平远县| 吴川市| 浦北县| 桐梓县| 金堂县| 中阳县|