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

本贴最后更新于 3112 天前,其中的信息可能已经天翻地覆

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

最近在看第三方的数据接口,访问其他网站提供的信息;比如,我们可能自己收集的数据相当有限,但是网上提供了很多关于天气预报、新闻、星座运势、身份证号、车辆违章、健康医疗、快递查询、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; }</pre>

 

/**
	 * 将输入流转换为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(); }</pre>

 

测试解析方法:

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

 

 

 

 

 

  • Gson
    2 引用
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    53 引用 • 190 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 830 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 445 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖 • 2 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 656 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    415 引用 • 3598 回帖 • 1 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 180 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 407 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    183 引用 • 3887 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 166 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 108 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 106 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 12 关注
  • 笔记

    好记性不如烂笔头。

    311 引用 • 794 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 543 回帖 • 4 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 698 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 271 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖 • 2 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    694 引用 • 537 回帖 • 5 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    84 引用 • 414 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 685 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 541 回帖