Gson解析第三方提供Json数据(天气预报,新闻等)
之前都是自己写后台,自己的server提供数据给client。
近期在看第三方的数据接口,訪问其它站点提供的信息。比方。我们可能自己收集的数据相当有限。可是网上提供了非常多关于天气预报、新闻、星座运势、身份证号、车辆违章、健康医疗、快递查询、ip查询、翻译等的api接口。基本返回数据为类型json和xml
我就喜欢简单便捷的东西。在这解析一下第三方新闻的接口返回的json数据;
我喜欢用谷歌提供的Gson,感觉比JSON去解析要简单。方便,快捷;当然了阿里巴巴提供的fastjson也是极好的。在这仅仅用gson解析了(废话似乎多了点)。
①先看一下我要解析的第三方的数据:(图片看不清能够拖动图片到新的页面标签中看哦~)
②然后从上面能够得到json数据的key值。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
③由于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 + "]";
}
}
④然后就是进行解析了,解析方法我在之前的博文中已经介绍了。假设没看的能够,先看看;
在这直接将方法列出来了:
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();
}
} }
数据太多了,仅仅截图了一部分数据:(图片看不清能够拖动图片到新的页面标签中看哦~)
Gson解析第三方提供Json数据(天气预报,新闻等)的更多相关文章
- 使用Gson解析复杂的json数据
Gson解析复杂的json数据 最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的jso ...
- Gson解析复杂的json数据
最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject ...
- Gson 解析多层嵌套JSON数据
http://stackoverflow.com/questions/14139437/java-type-generic-as-argument-for-gson
- hive 存储,解析,处理json数据
hive 处理json数据总体来说有两个方向的路走 1.将json以字符串的方式整个入Hive表,然后通过使用UDF函数解析已经导入到hive中的数据,比如使用LATERAL VIEW json_tu ...
- Json1:使用gson解析、生成json
Json解析: 1.json第三方解析包:json-lib.gson.jackson.fastjson等2.Google-gson只兼容jdk1.5版本以上:JSON-lib分别支持1.4和1.53. ...
- 【转】Jquery ajax方法解析返回的json数据
转自http://blog.csdn.net/haiqiao_2010/article/details/12653555 最近在用jQuery的ajax方法传递接收json数据时发现一个问题,那就是返 ...
- $Java-json系列(二):用JSONObject解析和处理json数据
本文中主要介绍JSONObject处理json数据时候的一些常用场景和方法. (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre ( ...
- 用JSONObject解析和处理json数据
(一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre (二)常见场景及处理方法 1.解析简单的json字符串: 1 // 简单的jso ...
- 【UE4 C++】 解析与构建 Json 数据
准备条件 Json 格式 { "Players":[ { "Name": "Player1", "health": 20 ...
随机推荐
- 步步为营-12-Dictionary-翻译
说明:https://pan.baidu.com/s/1nvPqhDJ所需文件在此目录下对应的位置 1 先做一个简单的英汉翻译词典.先搭UI页面 2 将百度网盘中提供的资料放置到bin\debug目录 ...
- 2018-2019 2 20165203 《网络对抗技术》 Exp2 后门原理与实践
2018-2019 2 20165203 <网络对抗技术> Exp2 后门原理与实践 实验内容 1.使用netcat获取主机操作Shell,cron启动 (0.5分) 2.使用socat获 ...
- 2018-2019-2 20165333 《网络对抗技术》 Exp5:MSF基础应用
2018-2019-2 20165333 <网络对抗技术> Exp5:MSF基础应用 实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路 ...
- hdu 1005 根据递推公式构造矩阵 ( 矩阵快速幂)
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Sample Input1 1 3 //a b n1 2 100 0 0 ...
- TopCoder FlowerGarden【拓扑排序】
https://community.topcoder.com/stat?c=problem_statement&pm=1918&rd=5006拓扑排序,每次选择最大的就好了 #incl ...
- 2.1博客系统 |基于form组件和Ajax实现注册登录
基于forms组件和Ajax实现注册功能 1 基于forms组件设计注册页面 --点击头像 === 点击input --头像预览: 修改用户选中的文件对象:获取文件对象的路径:修改img的src属性, ...
- xhprof扩展安装与使用
目录 一.xhprof扩展安装步骤 二.xhprof的使用 总结 参考资料 一.xhprof扩展安装步骤 xhprof是PHP的一个扩展,最好也直接安装上graphviz图形绘制工具(用于xhprof ...
- PHP 扩展 MongoDB
打开phpinfo 查看 nts(非线程) 还是 ts (线程),操作位数: 下载对应的版本的php_mongodb.dll 文件 下载链接: pecl mangodb下载 把文件解压出来 php_m ...
- python中使用XPath笔记
XPath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线. XPath介绍: ...
- Python 函数装饰器
首次接触到装饰器的概念,太菜啦! Python 装饰器可以大大节省代码的编写量,提升代码的重复使用率.函数装饰器其本质也是一个函数,我们可以把它理解为函数中定义了一个子函数. 例如我们有这么一个需求, ...