之前都是自己写后台,自己的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 + "]";
}
}

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

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

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

Gson解析第三方提供Json数据(天气预报,新闻等)的更多相关文章

  1. 使用Gson解析复杂的json数据

    Gson解析复杂的json数据 最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的jso ...

  2. Gson解析复杂的json数据

    最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject ...

  3. Gson 解析多层嵌套JSON数据

    http://stackoverflow.com/questions/14139437/java-type-generic-as-argument-for-gson

  4. hive 存储,解析,处理json数据

    hive 处理json数据总体来说有两个方向的路走 1.将json以字符串的方式整个入Hive表,然后通过使用UDF函数解析已经导入到hive中的数据,比如使用LATERAL VIEW json_tu ...

  5. Json1:使用gson解析、生成json

    Json解析: 1.json第三方解析包:json-lib.gson.jackson.fastjson等2.Google-gson只兼容jdk1.5版本以上:JSON-lib分别支持1.4和1.53. ...

  6. 【转】Jquery ajax方法解析返回的json数据

    转自http://blog.csdn.net/haiqiao_2010/article/details/12653555 最近在用jQuery的ajax方法传递接收json数据时发现一个问题,那就是返 ...

  7. $Java-json系列(二):用JSONObject解析和处理json数据

    本文中主要介绍JSONObject处理json数据时候的一些常用场景和方法. (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre ( ...

  8. 用JSONObject解析和处理json数据

    (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre (二)常见场景及处理方法 1.解析简单的json字符串: 1 // 简单的jso ...

  9. 【UE4 C++】 解析与构建 Json 数据

    准备条件 Json 格式 { "Players":[ { "Name": "Player1", "health": 20 ...

随机推荐

  1. 更好用的cmd窗口

    cmder是windows下的命令行工具,用来替代windows自带的cmd. 下载地址 下载后自建文件夹并解压,将Cmder.exe所在文件夹路径加入path, windows + r 键入cmde ...

  2. 【C++ Primer 第11章】2. 关联容器操作

    练习答案 一.访问元素 关联容器额外类型别名  key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型,只 适用于map mapped_type 对于set,与key_ ...

  3. C#读取wav文件

    private void showWAVForm(string filepath) //此函数只能用于读取16bit量化单声道的WAV文件 { FileStream fs = new FileStre ...

  4. Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  5. Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录(关闭默认站点或空主机头)

    这篇文章主要介绍了Nginx中禁止使用IP访问网站的配置实例,一般在备案时可能需要这种设置,需要的朋友可以参考下   国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问 ...

  6. 大数据小视角5:探究SSD写放大的成因与解决思路

    笔者目前开发运维的存储系统的服务器都跑在SSD之上,目前单机服务器最大的SSD容量有4T之多.(公司好有钱,以前在实验室都只有机械硬盘用的~~)但SSD本身的特性与机械硬盘差距较大,虽然说在性能上有诸 ...

  7. 一次webapck4 配置文件无效的解决历程

    前言 升级webpack4,一定要去看文档,特别是更新说明,不要自持用过原本webpack就自己开始折腾.折腾到后面,可能就默默流下眼泪了. webpack4的变化 webpack-cli抽离 web ...

  8. 是否可从一个static方法内发出对非static方法的调用?

    不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用.也就是说,当一个static方法被调用时, ...

  9. Angularjs 根据数据结构创建动态菜单无限嵌套循环--指令版

    目标:根据数据生成动态菜单,希望可以根据判断是否有子集无限循环下去. 菜单希望的样子是这样的: 菜单数据是这样的: $scope.expanders = [{ title: 'title1', lin ...

  10. 电商sku商品推荐

    1.逻辑回归LR进行实时离线三级品类训练. 2.通过用户对于实时.离线三级品类的偏好进行召回. 3.通过人的特征.sku特征.人sku交互特征.以及位置手机特征通过gbdt模型进行点击量预估.