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 ...
随机推荐
- ERP商品管理业务逻辑封装(三十四)
产品购进管理业务逻辑: public class ProductBLL { /// <summary> /// 产品对象添加 并且返回产品编号 /// </summary> / ...
- Ext.js入门:模板(四)
1.Ext.DomHelper简介2.Template语法使用简介3.Template简单应用4.Template中使用转换函数5.使用模板的自定义接口6.XTemplate应用 一:Ext.DomH ...
- Entity Framework解决sql 条件拼接,完美解决 解决 不支持 LINQ 表达式节点类型“Invoke”【转】
传统的操作数据库方式,筛选数据需要用StringBuilder拼接一大堆的WHERE子句. 在Entity Framework中,代码稍有不慎就会造成巨大性能消耗,如: using(var db=ne ...
- [转] web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估计也不会有: 问题:可以自己做浏览器插件播放RTSP吗? 答案:可以的,chrome做ppapi插件 ...
- python学习之集合
集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...
- BZOJ2843 极地旅行社 LCT
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2843 题意概括 有n座岛 每座岛上的企鹅数量虽然会有所改变,但是始终在[0, 1000]之间.你的 ...
- BZOJ2303 [Apio2011]方格染色 并查集
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2303 题意概括 现在有一个N*M矩阵,矩阵上只能填数字0或1 现在矩阵里已经有一些格子被填写了数字 ...
- BZOJ1878 [SDOI2009]HH的项链 树状数组 或 莫队
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1878 题意概括 给出一个长度为n的序列,用m次询问,问区间Li~Ri中有多少种不同的数. 0< ...
- Phone List HDU1671
字典树的包含与不包含关系 #include<bits/stdc++.h> using namespace std; ][]; ]; ; bool insert1( char *word ) ...
- File的方法
1.介绍 file 对象使用 open 函数来创建. 2.常用的方法