zoukankan      html  css  js  c++  java
  • Gson解析第三方提供Json数据(天气预报,新闻等)

    之前都是自己写后台,自己的server提供数据给client。

    近期在看第三方的数据接口,訪问其它站点提供的信息。比方。我们可能自己收集的数据相当有限。可是网上提供了非常多关于天气预报、新闻、星座运势、身份证号、车辆违章、健康医疗、快递查询、ip查询、翻译等的api接口。基本返回数据为类型json和xml

    我就喜欢简单便捷的东西。在这解析一下第三方新闻的接口返回的json数据;

    我喜欢用谷歌提供的Gson,感觉比JSON去解析要简单。方便,快捷;当然了阿里巴巴提供的fastjson也是极好的。在这仅仅用gson解析了(废话似乎多了点)。

    ①先看一下我要解析的第三方的数据:(图片看不清能够拖动图片到新的页面标签中看哦~)

    ②然后从上面能够得到json数据的key值。

    ③由于Gson是基于对象的,所以我们要将这些 “键值”建立一个实体类

    首先能够看到最外层是三个键值 error_code ,reason,result 然后result中为一个json数组,那么我们将json数组中的数据单独抽出一个对象来。

    演示样例代码例如以下:

    package com.zml.pojo;
    
    import java.util.List;
    
    /**
     * @author 郑明亮
     * @Time:2016-3-18 上午10:28:55
     * @version 1.0
     */
    public class NewsJson {
    	String error_code;
    	String reason;
    	List<News> result;
    	
    	public NewsJson(String error_code, String reason, List<News> result) {
    		super();
    		this.error_code = error_code;
    		this.reason = reason;
    		this.result = result;
    	}
    
    	public NewsJson() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public String getError_code() {
    		return error_code;
    	}
    
    	public void setError_code(String error_code) {
    		this.error_code = error_code;
    	}
    
    	public String getReason() {
    		return reason;
    	}
    
    	public void setReason(String reason) {
    		this.reason = reason;
    	}
    
    	public List<News> getResult() {
    		return result;
    	}
    
    	public void setResult(List<News> result) {
    		this.result = result;
    	}
    
    	@Override
    	public String toString() {
    		return "NewsJson [error_code=" + error_code + ", reason=" + reason
    				+ ", result=" + result + "]";
    	}
    	
    }
    


     

    package com.zml.pojo;
    /**
     * @author 郑明亮
     * @Time:2016-3-18 上午10:27:13
     * @version 1.0
     */
    public class News {
    	String ctime;
    	String title;
    	String picUrl;
    	String url;
    	
    	
    	public News(String ctime, String tittle, String picUtl, String url) {
    		super();
    		this.ctime = ctime;
    		this.title = tittle;
    		this.picUrl = picUtl;
    		this.url = url;
    	}
    
    
    	public News() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    
    	public String getCtime() {
    		return ctime;
    	}
    
    
    	public void setCtime(String ctime) {
    		this.ctime = ctime;
    	}
    
    
    	public String getTittle() {
    		return title;
    	}
    
    
    	public void setTittle(String tittle) {
    		this.title = tittle;
    	}
    
    
    	public String getPicUtl() {
    		return picUrl;
    	}
    
    
    	public void setPicUtl(String picUtl) {
    		this.picUrl = picUtl;
    	}
    
    
    	public String getUrl() {
    		return url;
    	}
    
    
    	public void setUrl(String url) {
    		this.url = url;
    	}
    
    
    	@Override
    	public String toString() {
    		return "News [ctime=" + ctime + ", tittle=" + title + ", picUtl="
    				+ picUrl + ", url=" + url + "]";
    	}
    }
    


    ④然后就是进行解析了,解析方法我在之前的博文中已经介绍了。假设没看的能够,先看看;

                      传送门 Andorid之Gson解析Json数据

    在这直接将方法列出来了:

    	public static <T> T getObjectData(String jsonString, Class<T> type) {
    
    		T t = null;
    		try {
    			Gson gson = new Gson();
    			t = gson.fromJson(jsonString, type);
    		} catch (JsonSyntaxException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return t;
    	}


     

    /**
    	 * 将输入流转换为byte[]
    	 * 
    	 * @param is
    	 * @return
    	 */
    	public static byte[] IsToByte(InputStream is) {
    
    		ByteArrayOutputStream bos = new ByteArrayOutputStream();
    		byte buffer[] = new byte[1024];
    		int len = 0;
    		try {
    			while ((len = is.read(buffer)) != -1) {
    				bos.write(buffer, 0, len);
    
    			}
    
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			return null;
    		} finally {
    			try {
    				bos.flush();
    				bos.close();
    				is.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    
    		}
    
    		return bos.toByteArray();
    	}


    ⑤測试解析方法:

    package com.zml.pojo.test;
    
    import static org.junit.Assert.*;
    
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    
    import org.junit.Test;
    
    import com.zml.pojo.NewsJson;
    import com.zml.utils.GsonTools;
    
    /**
     * @author 郑明亮
     * @Time:2016年3月18日 上午10:35:39
     * @version 1.0
     */
    public class TestGsonAPI {
    
    	@Test
    	public void test() {
    		try {
    			URL url = new URL("http://api.avatardata.cn/TechNews/Query?key=5e3bedcfa2714e36a3e46dd2efce00d9&page=1&rows=10");
    			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    //			String data = connection.getContentType();
    				String dataString = new String(GsonTools.IsToByte(connection.getInputStream()),"utf-8");
    				NewsJson newsJson = GsonTools.getObjectData(dataString, NewsJson.class);
    				System.out.println(newsJson.toString());
    			System.out.println(dataString);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    }
    

    数据太多了,仅仅截图了一部分数据:(图片看不清能够拖动图片到新的页面标签中看哦~)


  • 相关阅读:
    grep 精确匹配
    @ARGV
    同时查看多个文件
    R画双y轴图
    R画饼图
    linux的sort排序
    $0
    QQ图
    Config::Std模块安装
    R语言做正态分布检验
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7398768.html
Copyright © 2011-2022 走看看