数据解析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

  

  未完,待续。

  

时间: 2024-10-08 07:54:38

数据解析2:JSON解析(1)的相关文章

iOS之网络数据下载和JSON解析

iOS之网络数据下载和JSON解析 简介 在本文中笔者主要给大家介绍IOS如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示. 涉及到的知识点: 1.NSURLConnection 异步下载和封装 2.JSON格式和JSON格式解析 3.数据显示和使用SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 什么是网络应用? 需要通过联网进行操作的应用 网络应用的程序结构? c/s结构:即客户端/服务端 常见的

网络数据下载和JSON解析

ios之网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍iOS中如何利用NSURLConnection从网络上,下载数据,以及如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示. 涉及到的知识点有: 1.NSURLConnection异步下载和封装 2.JSON格式和JSON格式解析 3.数据显示和使用SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 什么是网络应用? 对于iOS开发来说的网络应用,笔者觉得需要通过访问网络,获取服务端数据来实现全

ios的网络数据下载和json解析

ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知识点: NSYRLConnection异步下载和封装 JSON格式和JSON格式解析 数据显示和使用SDwebimage异步下载图片 内容 网络下载基础知识介绍 NSURLConnection使用 JSON格式说明和格式化工具 一个完成页面的实现(包含model和SDWebimage) 什么是网络应

iOS网络数据下载和JSON解析

iOS网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍iOS中如何利用NSURLConnection如何从网络中下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示. 涉及到的知识点: 1.NSURLConnection异步下载和封装 #import "ZJHttpRequest.h" //消除performSelector的警告 #pragma clang diagnostic ignored "-Warc-performSelec

ios 网络数据下载和JSON解析

ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示 涉及到得知识: 1.NSURLConnection异步下载和封装 2.JSON格式和JSON格式解析 3.数据显示和使用SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 (1)什么是网络应用? 一般情况下, iPhone的计算机, 照相机不需要从网络上下载数据也能运行, 所以这

iOS之 网络数据下载及JSON解析

网络数据下载及JSON解析 简介 在本文章中笔者将要为大家介绍ios中任何利用NSRULConnection从网络上下载数据,如何解析下来的JSON 格式的数据,以及如何显示数据和图片的异步下载 有关的知识点 1.NSRULConnection的异步下载以及封装 2.JSON格式和JSON格式的解析 3.数据显示以及SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 什么是网络应用? 网络应用的程序结构 常见的网络接口形式 常见的数据格式 界面开发的一般流程 2.NSRULConn

IOS 开发之网络数据下载和JSON解析

简介 在本文中,我将给大家介绍ios中如何运用NSURLConnection从网络上下载数据,以及解析JSON数据格式的数据,还有数据的显示和图片异步下载. 涉及到的知识点: 1.NSURLConnection的异步下载和数据请求方法的封装. 2.认识JSON格式和JSON格式的解析使用 3.数据在模拟器上的显示和图片的异步下载(使用SDWebImage异步显示图片,SDWebImage是一个库) 注意: 在ios开发中,无论是数据还是图片都是使用异步下载方法,不能使用同步. 内容 首先,要完成

iOS数据解析之JSON解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,易于阅读和编写,同时也易于机器解析和生成 JSON文件有两种结构: 1 对象:"名称/值"对的集合,以"{"开始,以"}"结束,名称和值中间用":"隔开 2 数组:值的有序列表,以"["开始,以"]"结束,中间是数据,数据以","分隔 (JSON中

数据解析2:JSON解析(2)

JSON解析除了导入json包,通过JSONObject类和JSONArray类进行解析外,还有其他的解析方法,如谷歌Gson解析和阿里巴巴FastJson解析,它们都需要导入相应的包. 下面主要介绍Gson解析和FastJson解析: 1.Gson解析: Gson解析JSON字符串的步骤: 1.创建Gson对象 Gson gson = new Gson(); 2.调用Gson的解析方法,fromJson() 其中比较常用的是: 1)fromJson(String json,Class<T>