您的位置:首页 > 移动开发 > Android开发

Android初级自学笔记—json 数据解析

2016-01-24 21:53 513 查看
json 数据解析

json(JavaScript Object Notation)是一种轻量级的数据交换格式。本质就是具有特定格式的字符串。

json 数据格式

String json1="{"id":12,"name":"tom"}";

String json1="[{"id":12,"name":"tom"},{"id":12,"name":"tom"}]";


get(String name)此方法只返回值,但在对象类型的形式
getBoolean(String name)该方法返回键指定的布尔值
getDouble(String name)该方法返回键指定的double值
getInt(String name)该方法返回键指定的整数值
getLong(String name)该方法返回键指定的long值
length()这个方法返回这个对象的名称/值映射关系的数量..
names()这个方法返回一个包含此对象的字符串名称的数组

构建对象 JSONObject json = new JSONObject();

解析下面json数据

{
"sys":
   {
      "country":"GB",
      "sunrise":1381107633,
      "sunset":1381149604
   },
"weather":[
   {
      "id":711,
      "main":"Smoke",
      "description":"smoke",
      "icon":"50n"
   }
],
"main":
   {
      "temp":304.15,
      "pressure":1009,
   }
}


解析一个JSON对象,首先创建一流的 JSONObject 对象,并指定包含JSON数据给它一个字符串。其语法是:


String in;
JSONObject reader = new JSONObject(in);

然后是解析JSON。一个JSON文件由不同的对象有不同的键/值对等,这样JSONObject有一个单独的函数用于解析每个JSON文件的组成。它的语法如下:

JSONObject sys  = reader.getJSONObject("sys");
country = sys.getString("country");

JSONObject main  = reader.getJSONObject("main");
temperature = main.getString("temp");

解析代码

 private String country = "county";
   private String temperature = "temperature";
   private String humidity = "humidity";
   private String pressure = "pressure";
   private String urlString = null;

   public volatile boolean parsingComplete = true;
   public HandleJSON(String url){
      this.urlString = url;
   }
   public String getCountry(){
      return country;
   }
   public String getTemperature(){
      return temperature;
   }
   public String getHumidity(){
      return humidity;
   }
   public String getPressure(){
      return pressure;
   }


   @SuppressLint("NewApi")
   public void readAndParseJSON(String in) {
      try {
         JSONObject reader = new JSONObject(in);


         JSONObject sys  = reader.getJSONObject("sys");
         country = sys.getString("country");


         JSONObject main  = reader.getJSONObject("main");
         temperature = main.getString("temp");


         pressure = main.getString("pressure");
         humidity = main.getString("humidity");


         parsingComplete = false;


        } catch (Exception e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        }

   }
   public void fetchJSON(){
      Thread thread = new Thread(new Runnable(){
         @Override
         public void run() {
         try {
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            // Starts the query
            conn.connect();
         InputStream stream = conn.getInputStream();

      String data = convertStreamToString(stream);

      readAndParseJSON(data);
         stream.close();

         } catch (Exception e) {
            e.printStackTrace();
         }
         }
      });

       thread.start();
   }
   static String convertStreamToString(java.io.InputStream is) {
      java.util.Scanner s = new java.util.Scanner(is).useDelimiter("A");
      return s.hasNext() ? s.next() : "";
   }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: