Gson解析第三方提供Json数据(天气预报,新闻等)

  |   0 评论   |   258 浏览

之前都是自己写后台,自己的服务器提供数据给客户端,

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

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

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

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

http://img.blog.csdn.net/20160318111930220?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

 

③因为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 + "]";
	}
}

 

④然后就是进行解析了,解析方法我在之前的博文中已经介绍了,如果没看的可以,先看看;

 传送门 

Json数据解析之FastJson解析

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

	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();
		}
	}

}

 

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

 

http://img.blog.csdn.net/20160318113832307?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

 

 

 

 

 

评论

发表评论

validate