zoukankan      html  css  js  c++  java
  • 数据解析2:JSON解析(1)

      JSON是网络传输中数据组织的一种格式。

      下面为几个不同的JSON数据:

      1."{name:'jack',age:23}"

      2."{student:{name:'jack',age:23}}"

      3."{students:[{name:'jack',age:23},{name:'lily',age:22}]}"

      4."{object:{persons:[{name:'呵呵',image:'http://192.168.56.1:8080/Web/ok.jpg'},{name:'哈哈',image:'http://192.168.56.1:8080/Web/s1.png'},{name:'嘿嘿',image:'http://192.168.56.1:8080/Web/s2.jpg'}]}}"

      5."[{school:'pku',good:'false',class:{name:'android',count:40}},{school:'pku',good:'true',class:{name:'ios',count:45}}]"

      6."{status:2,result:[{company_name:'pku1',company_id:1}, {company_name:'pku2',company_id:5},{company_name:'pku3',company_id:7}]}"

        对于JSON数据的第一印象:JSON数据就是字符串,且包含在大括号之间,且字符串中的数据是有一定结构的,而且每一部分数据好像采用的是键值映射的关系。

      JSON的简单介绍:

      1.

      

      2.

     

      3.

        

      大概总结下,就是JSON字符串,是包含在大括号里,组织数据有两种方式,一是键值对,二是数组,通过这两种,采用符合规范的结构,你可以自己写出任意自定义任意长的JSON数据,检查一个JSON数据是否正确,可以通过一个网址http://www.bejson.com/,输入你自己写的json字符串,它可以帮你校验。

      

      那么如何解析JSON字符串呢?

      进行解析,首先要导入一个JSON解析相关的jar包(在Android开发下这个包已经自动导入了,而Java中需要下载并导入包),这个包下有两个重要的类,分别是JSONObjectJSONArray,分别与上面讲的键值对和数组一一对应。

      下面是解析几个简单JSON字符串的例子,可以很好帮助入门JSON解析:

      1.

    1 String json = "{name:'Jack',age:20,address:'beijing'}"2 
    3 JSONObject object = new JSONObject(json);
    4 
    5 String name = object.getString("name");
    6 int age = object.getInt("age");
    7 String address = object.getString("address");        
    8 System.out.println(name+","+age+","+address);

      2.

    1 String json = "{student:{address:'beijing',age:18,name:'Lucy'}}";
    2         
    3 JSONObject obj = new JSONObject(json);
    4 JSONObject object = obj.getJSONObject("student");
    5         
    6 String address = object.getString("address");
    7 int age = object.getInt("age");
    8 String name = object.getString("name");    
    9 System.out.println(address+","+age+","+name);

      3.

     1 String json = "{students:[{address:'shanghai',age:23,name:'xiaobai'},{address:'shenzhen',age:24,name:'xiaohei'}]}";
     2         
     3         JSONObject object  = new JSONObject(json);
     4         JSONArray array = object.getJSONArray("students");
     5         
     6         //遍历数组,得到每个对象
     7         for(int i=0;i<array.length();i++)
     8         {
     9             JSONObject obj = array.getJSONObject(i);
    10             String address = obj.getString("address");
    11             int age = obj.getInt("age");
    12             String name = obj.getString("name");
    13             System.out.println(address+","+age+","+name);
    14         }

      4.

     1 String json = "{object:{persons:[{name:'呵呵',image:'http://192.168.56.1:8080/Web/ok.jpg'},{name:'哈哈',image:'http://192.168.56.1:8080/Web/s1.png'},{name:'嘿嘿',image:'http://192.168.56.1:8080/Web/s2.jpg'}]}}";
     2 
     3          JSONObject object = new JSONObject(json);
     4          
     5          JSONObject obj = object.getJSONObject("object");
     6          
     7          JSONArray array = obj.getJSONArray("persons");
     8          
     9          for(int i=0;i<array.length();i++)
    10          {
    11              JSONObject jsonObj = array.getJSONObject(i);
    12              
    13              String name = jsonObj.getString("name");
    14              String image = jsonObj.getString("image");
    15              System.out.println(name+","+image);
    16              
    17          }

      5.

     1 String json="[{school:'bpk1',good:'false',class:{name:'android',count:40}},{school:'pku2',good:'true',class:{name:'ios',count:45}}]";
     2 
     3         JSONArray array = new JSONArray(json);
     4         
     5         for(int i=0;i<array.length();i++)
     6         {
     7             JSONObject obj = array.getJSONObject(i);
     8             String school = obj.getString("school");
     9             String good = obj.getString("good");
    10             JSONObject object = obj.getJSONObject("class");
    11             String name = object.getString("name");
    12             int count = object.getInt("count");
    13             
    14             System.out.println(school+","+good+","+name+","+count);
    15         }

      6.

     1 String json="{status:2,result:[{company_name:'pku1',company_id:1}, {company_name:'pku2',company_id:5},{company_name:'pku3',company_id:7}]}";
     2 
     3         
     4         JSONObject object = new JSONObject(json);
     5         String status = object.getString("status");
     6         System.out.println(status);
     7         
     8         JSONArray array = object.getJSONArray("result");
     9         for(int i=0;i<array.length();i++)
    10         {
    11             JSONObject obj = array.getJSONObject(i);
    12             String comName = obj.getString("company_name");
    13             int comId = obj.getInt("company_id");
    14             
    15             System.out.println(comName+","+comId);
    16         }

      总结以上:关于JSON数据的解析,无非就是JSONObject和JSONArray根据实际的JSON字符串的结构灵活使用,当获取的是对象,使用的是JSONObject,当获取的是一个数组,使用的是JSONArray,让后取出数据总是从JSONObject中根据键取出相对应的数据。

      示例:看一个比较复杂的例子,从网络上获取JSON字符串,然后解析出来

     1 {
     2     "cityname": "双鸭山",
     3     "citycode": "101051301",
     4     "citydesc": "黑龙江 双鸭山",
     5     "publishtime": "2015年09月17日10:00",
     6     "lastupdate": "2015-09-17 10:50:04",
     7     "data": [
     8         {
     9             "date": "2015-09-17",
    10             "icon": "d00|n00",
    11             "weather": "晴",
    12             "temperature": "29°C/15°C",
    13             "winddirect": "南风微风"
    14         },
    15         {
    16             "date": "2015-09-18",
    17             "icon": "d00|n00",
    18             "weather": "晴",
    19             "temperature": "27°C/14°C",
    20             "winddirect": "南风微风"
    21         },
    22         {
    23             "date": "2015-09-19",
    24             "icon": "d03|n01",
    25             "weather": "阵雨转多云",
    26             "temperature": "24°C/13°C",
    27             "winddirect": "东南风微风"
    28         },
    29         {
    30             "date": "2015-09-20",
    31             "icon": "d00|n00",
    32             "weather": "晴",
    33             "temperature": "22°C/12°C",
    34             "winddirect": "东南风转西风微风"
    35         },
    36         {
    37             "date": "2015-09-21",
    38             "icon": "d00|n00",
    39             "weather": "晴",
    40             "temperature": "23°C/14°C",
    41             "winddirect": "西风3-4级"
    42         },
    43         {
    44             "date": "2015-09-22",
    45             "icon": "d00|n01",
    46             "weather": "晴转多云",
    47             "temperature": "25°C/13°C",
    48             "winddirect": "西南风3-4级"
    49         }
    50     ],
    51     "live": {
    52         "updatetime": null,
    53         "temperature": "℃",
    54         "humidity": null,
    55         "winddirect": ""
    56     }
    57 }
    JSON字符串
      1 package com.qianfeng.json3;
      2 
      3 import java.util.List;
      4 
      5 public class Weather {
      6     
      7     private String cityName;
      8     private String cityCode;
      9     private String cityDesc;
     10     private String publishtime;
     11     private String lastupdate;
     12     private List<WeatherData> datas;
     13     private Live  live;
     14     
     15     public Weather(){}
     16 
     17     public Weather(String cityName, String cityCode, String cityDesc,
     18             String publishtime, String lastupdate, List<WeatherData> datas,
     19             Live live) {
     20         super();
     21         this.cityName = cityName;
     22         this.cityCode = cityCode;
     23         this.cityDesc = cityDesc;
     24         this.publishtime = publishtime;
     25         this.lastupdate = lastupdate;
     26         this.datas = datas;
     27         this.live = live;
     28     }
     29 
     30     public String getCityName() {
     31         return cityName;
     32     }
     33 
     34     public void setCityName(String cityName) {
     35         this.cityName = cityName;
     36     }
     37 
     38     public String getCityCode() {
     39         return cityCode;
     40     }
     41 
     42     public void setCityCode(String cityCode) {
     43         this.cityCode = cityCode;
     44     }
     45 
     46     public String getCityDesc() {
     47         return cityDesc;
     48     }
     49 
     50     public void setCityDesc(String cityDesc) {
     51         this.cityDesc = cityDesc;
     52     }
     53 
     54     public String getPublishtime() {
     55         return publishtime;
     56     }
     57 
     58     public void setPublishtime(String publishtime) {
     59         this.publishtime = publishtime;
     60     }
     61 
     62     public String getLastupdate() {
     63         return lastupdate;
     64     }
     65 
     66     public void setLastupdate(String lastupdate) {
     67         this.lastupdate = lastupdate;
     68     }
     69 
     70     public List<WeatherData> getDatas() {
     71         return datas;
     72     }
     73 
     74     public void setDatas(List<WeatherData> datas) {
     75         this.datas = datas;
     76     }
     77 
     78     public Live getLive() {
     79         return live;
     80     }
     81 
     82     public void setLive(Live live) {
     83         this.live = live;
     84     }
     85 
     86     @Override
     87     public String toString() {
     88         return "Weather [cityName=" + cityName + ", cityCode=" + cityCode
     89                 + ", cityDesc=" + cityDesc + ", publishtime=" + publishtime
     90                 + ", lastupdate=" + lastupdate + ", datas=" + datas + ", live="
     91                 + live + "]";
     92     }
     93     
     94     
     95     
     96     
     97     
     98     
     99 
    100 }
    Weather.java
     1 package com.qianfeng.json3;
     2 
     3 public class WeatherData {
     4     
     5     private String date;
     6     private String icon;
     7     private String weather;
     8     private String temperature;
     9     private String winddirect;
    10     
    11     public WeatherData(){}
    12 
    13     public WeatherData(String date, String icon, String weather,
    14             String temperature, String winddirect) {
    15         super();
    16         this.date = date;
    17         this.icon = icon;
    18         this.weather = weather;
    19         this.temperature = temperature;
    20         this.winddirect = winddirect;
    21     }
    22 
    23     public String getDate() {
    24         return date;
    25     }
    26 
    27     public void setDate(String date) {
    28         this.date = date;
    29     }
    30 
    31     public String getIcon() {
    32         return icon;
    33     }
    34 
    35     public void setIcon(String icon) {
    36         this.icon = icon;
    37     }
    38 
    39     public String getWeather() {
    40         return weather;
    41     }
    42 
    43     public void setWeather(String weather) {
    44         this.weather = weather;
    45     }
    46 
    47     public String getTemperature() {
    48         return temperature;
    49     }
    50 
    51     public void setTemperature(String temperature) {
    52         this.temperature = temperature;
    53     }
    54 
    55     public String getWinddirect() {
    56         return winddirect;
    57     }
    58 
    59     public void setWinddirect(String winddirect) {
    60         this.winddirect = winddirect;
    61     }
    62 
    63     @Override
    64     public String toString() {
    65         return "WeatherData [date=" + date + ", icon=" + icon + ", weather="
    66                 + weather + ", temperature=" + temperature + ", winddirect="
    67                 + winddirect + "]";
    68     }
    69 }
    WeatherData.java
     1 package com.qianfeng.json3;
     2 
     3 public class Live {
     4     
     5     private String updatetime;
     6     private String temperature;
     7     private String humidity;
     8     private String winddirect;
     9     
    10     public Live(){}
    11 
    12     public Live(String updatetime, String temperature, String humidity,
    13             String winddirect) {
    14         super();
    15         this.updatetime = updatetime;
    16         this.temperature = temperature;
    17         this.humidity = humidity;
    18         this.winddirect = winddirect;
    19     }
    20 
    21     public String getUpdatetime() {
    22         return updatetime;
    23     }
    24 
    25     public void setUpdatetime(String updatetime) {
    26         this.updatetime = updatetime;
    27     }
    28 
    29     public String getTemperature() {
    30         return temperature;
    31     }
    32 
    33     public void setTemperature(String temperature) {
    34         this.temperature = temperature;
    35     }
    36 
    37     public String getHumidity() {
    38         return humidity;
    39     }
    40 
    41     public void setHumidity(String humidity) {
    42         this.humidity = humidity;
    43     }
    44 
    45     public String getWinddirect() {
    46         return winddirect;
    47     }
    48 
    49     public void setWinddirect(String winddirect) {
    50         this.winddirect = winddirect;
    51     }
    52 
    53     @Override
    54     public String toString() {
    55         return "Live [updatetime=" + updatetime + ", temperature="
    56                 + temperature + ", humidity=" + humidity + ", winddirect="
    57                 + winddirect + "]";
    58     }
    59     
    60     
    61 
    62 }
    Live.java
     1 package com.qianfeng.json3;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.json.JSONArray;
     7 import org.json.JSONException;
     8 import org.json.JSONObject;
     9 
    10 public class ParseTool {
    11     
    12     public static Weather parserWeather(String jsonString) throws JSONException
    13     {
    14         Weather weather = new Weather();
    15         
    16         JSONObject object = new JSONObject(jsonString);
    17         String cityname = object.getString("cityname");
    18         String citycode = object.getString("citycode");
    19         String citydesc = object.getString("citydesc");
    20         String publishtime = object.getString("publishtime");
    21         String lastupdate = object.getString("lastupdate");
    22         
    23         weather.setCityName(cityname);
    24         weather.setCityCode(citycode);
    25         weather.setCityDesc(citydesc);
    26         weather.setPublishtime(publishtime);
    27         weather.setLastupdate(lastupdate);
    28         
    29         JSONArray array = object.getJSONArray("data");
    30         WeatherData data = null;
    31         List<WeatherData>  datas = new ArrayList<WeatherData>();
    32         for(int i=0;i<array.length();i++)
    33         {
    34             JSONObject obj = array.getJSONObject(i);
    35             String date = obj.getString("date");
    36             String icon = obj.getString("icon");
    37             String weathers = obj.getString("weather");
    38             String temperature = obj.getString("temperature");
    39             String winddirect = obj.getString("winddirect");
    40             data = new WeatherData();
    41             data.setDate(date);
    42             data.setIcon(icon);
    43             data.setWeather(weathers);
    44             data.setTemperature(temperature);
    45             data.setWinddirect(winddirect);
    46             datas.add(data);
    47         }
    48         
    49         weather.setDatas(datas);
    50         
    51         JSONObject jsonObj = object.getJSONObject("live");
    52         String updatetime = jsonObj.getString("updatetime");
    53         String temperatures = jsonObj.getString("temperature");
    54         String humidity = jsonObj.getString("humidity");
    55         String winddirects = jsonObj.getString("winddirect");
    56         Live live = new Live();
    57         live.setUpdatetime(updatetime);
    58         live.setTemperature(temperatures);
    59         live.setHumidity(humidity);
    60         live.setWinddirect(winddirects);
    61         
    62         weather.setLive(live);
    63         
    64         return weather;
    65     }
    66 
    67 }
    ParseTool .java
     1 package com.qianfeng.json3;
     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 import java.util.ArrayList;
    10 import java.util.List;
    11 
    12 import org.json.JSONArray;
    13 import org.json.JSONException;
    14 import org.json.JSONObject;
    15 
    16 public class HttpUtil {
    17     
    18     // 获取服务器端json字符串
    19     public static String getJsonStr(String path) throws IOException
    20     {
    21         URL url = new URL(path);
    22         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    23         
    24         conn.setRequestMethod("GET");
    25         conn.setConnectTimeout(5000);
    26         conn.setDoInput(true);
    27         
    28         conn.connect();
    29         
    30         InputStream in = null;
    31         if(conn.getResponseCode()==200)
    32         {
    33             in = conn.getInputStream();
    34         }
    35         return changeToStr(in);
    36     }
    37 
    38     private static String changeToStr(InputStream in) throws IOException {
    39         ByteArrayOutputStream bos = new ByteArrayOutputStream();
    40         byte[] arr = new byte[1024];
    41         int len = 0;
    42         while((len = in.read(arr))!=-1)
    43         {
    44             bos.write(arr,0,len);
    45         }
    46         return new String(bos.toByteArray(),"utf-8");
    47     }
    48     
    49     
    50 
    51 }
    HttpUtil.java
     1 package com.qianfeng.json3;
     2 
     3 import java.io.IOException;
     4 
     5 import org.json.JSONException;
     6 
     7 public class Test {
     8 
     9     /**
    10      * @param args
    11      * @throws IOException 
    12      * @throws JSONException 
    13      */
    14     public static void main(String[] args) throws IOException, JSONException {
    15         
    16         String path = "http://weather.xcyh.org/101051301/json/6";
    17         
    18         String jsonString = HttpUtil.getJsonStr(path);
    19         
    20         Weather weather = ParseTool.parserWeather(jsonString);
    21         
    22         System.out.println(weather);
    23 
    24     }
    25 }
    Test.java

      

      未完,待续。

      

  • 相关阅读:
    第3章 Java数组(上): 一维数组和二维数组
    第二章 JavaScript总结(下)
    第二章 JavaScript案例(中)
    第二章 JavaScript文档(上)
    第一章 Html+Css使用总结(下)
    第一章 HTML+CSS(中)
    div布局
    阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:6. 设备事件上报
    阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:5. 设置设备属性
    阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4.1 上报位置信息
  • 原文地址:https://www.cnblogs.com/enjoy-coding/p/4815705.html
Copyright © 2011-2022 走看看