JSON是我们在实际开发最常用的数据交换格式,GSON则是谷歌提供的用来解析Json数据的一个Java类库,在进行Gson介绍之前我们通过以下几个部分对Gson进行深入的了解。

一、JSON的简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。用于数据转化传输,通用于PHP、Java、C++、C#、Python等编程语言的数据交换传输。它易于人阅读和编写,同时也易于机器解析和生成。
基本结构:对象、数组

二、GSON简介和特点

GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。
特点:a、快速、高效
    b、代码量少、简洁
    c、面向对象
      d、数据传递和解析方便

三、GSON的基本使用

Json数据如下:
{"rating": {"max": 10, "numRaters": 348, "average": "7.0", "min": 0}, "subtitle": "", "author": ["[日] 片山恭一"], "pubdate": "2005-1", "tags": [{"count": 136, "name": "片山恭一", "title": "片山恭一"}, {"count": 63, "name": "日本", "title": "日本"}, {"count": 61, "name": "日本文学", "title": "日本文学"}, {"count": 38, "name": "小说", "title": "小说"}, {"count": 32, "name": "满月之夜白鲸现", "title": "满月之夜白鲸现"}, {"count": 15, "name": "爱情", "title": "爱情"}, {"count": 8, "name": "純愛", "title": "純愛"}, {"count": 8, "name": "外国文学", "title": "外国文学"}], "origin_title": "", "image": "https://img1.doubanio.com/mpic/s1747553.jpg", "binding": "平装", "translator": ["豫人"], "catalog": "", "pages": "180", "images": {"small": "https://img1.doubanio.com/spic/s1747553.jpg", "large": "https://img1.doubanio.com/lpic/s1747553.jpg", "medium": "https://img1.doubanio.com/mpic/s1747553.jpg"}, "alt": "http://book.douban.com/subject/1220562/", "id": "1220562", "publisher": "青岛出版社", "isbn10": "7543632608", "isbn13": "9787543632608", "title": "满月之夜白鲸现", "url": "http://api.douban.com/v2/book/1220562", "alt_title": "", "author_intro": "", "summary": "那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。", "price": "15.00元"
}

我们解析出其中的title、publisher、summary和数组tags。

1、创建一个android工程,并在AndroidManifest.xml文件上添加网络权限
    <uses-permission android:name="android.permission.INTERNET"/>

2、请求网络数据并进行解析

MainActivity类:
package com.example.gsondemo;import java.util.ArrayList;import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.Toast;import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.bean.Book;
import com.example.bean.Tag;
import com.google.gson.Gson;public class MainActivity extends ActionBarActivity
{//请求接口private String url = "https://api.douban.com/v2/book/1220562";@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getData();}/*** 获取网络数据*/private void getData(){//创建请求对象StringRequest request = new StringRequest(url, new Listener<String>() {@Overridepublic void onResponse(String response){Log.e("info", response);dealData(response);}}, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error){Toast.makeText(MainActivity.this, "网络请求出错", Toast.LENGTH_SHORT).show();}});//把请求对象加入请求队列里面new Volley().newRequestQueue(getApplicationContext()).add(request);}public void dealData(String result){//实例化Gson对象Gson gson = new Gson();//把json字符串转化为对象Book book = gson.fromJson(result, Book.class);ArrayList<Tag> list = book.getTags();for (int i = 0; i < list.size(); i++){Tag tag = list.get(i);Log.e("name", tag.getName());}Toast.makeText(MainActivity.this, "标题:" + book.getTitle() + "  出版社:" + book.getPublisher()+ "   Tag:" + book.getTags().size(), 1).show();}
}

实体类Book:

package com.example.bean;import java.util.ArrayList;public class Book
{private String title;//标题private String publisher;//出版社private String summary;//概要private ArrayList<Tag> tags;public String getTitle(){return title;}public void setTitle(String title){this.title = title;}public String getPublisher(){return publisher;}public void setPublisher(String publisher){this.publisher = publisher;}public String getSummary(){return summary;}public void setSummary(String summary){this.summary = summary;}public ArrayList<Tag> getTags(){return tags;}public void setTags(ArrayList<Tag> tags){this.tags = tags;}}

Tag类:

package com.example.bean;public class Tag
{private String count;private String name;private String title;public String getCount(){return count;}public void setCount(String count){this.count = count;}public String getName(){return name;}public void setName(String name){this.name = name;}public String getTitle(){return title;}public void setTitle(String title){this.title = title;}}

好了,GSON的使用就是那么简单。

项目下载地址:http://download.csdn.net/detail/u013043346/9405847

Gson的基本介绍和使用相关推荐

  1. Okhttp、Volley和Gson的简单介绍和配合使用

    1.okhttp是一个高效的.快速的被谷歌认可的,支持HTTP/2和SPDY volley是一个方便网络任务库,可以负责请求.加载.缓存等同步问题,也可以处理图片.JSON.文本操作起来比较简单 gs ...

  2. Android Gson使用详解

    Json 是一种文本形式的数据交换格式,比 xml 更为轻量.Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 FastJson 两种,这里要介绍的是 Gson ...

  3. Android中的JSON解析方式:json; Gson ; Fastjson

    本文主要介绍Json数据的解析 ----a,json数据的介绍 ----b,json数据的解析 ----c,gson数据的解析,谷歌公司的一种格式 ----d,fastjson数据的解析,阿里巴巴的一 ...

  4. 利用Gson对json进行flatten(扁平化)处理

    目录 一.Gson的简单介绍 二.通过构建json树实现两层json的解析 三.通过递归实现多层json的解析 一.Gson的简单介绍 Gson是Google发布的一个处理json的java库.通过使 ...

  5. android gson教程,Android Gson使用详解

    一.Gson的基本用法 1.1.Gson对象 在进行序列化与反序列操作前,需要先实例化一个 com .google.gson.Gson 对象,获取 Gson 对象的方法有两种//通过构造函数来获取 G ...

  6. Retrofit 入门和提高

    retrofit 简单的: 1.首先 compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.okhttp ...

  7. JSON入门之二:org.json的基本用法

    java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...

  8. 【凯子哥带你做高仿】“煎蛋”Android版的高仿及优化(二)——大图显示模式、评论“盖楼”效果实现详解

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前一篇文章中,我们学习了如何进行逆向工程和TcpDump进行抓包,获取我们的数据接口,那么有了数据之后,我 ...

  9. 最全Gson使用介绍,通俗易懂。

    Gson介绍 GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串 在使用Gson ...

  10. 一起来开发Android的天气软件(一)——功能规格介绍

    从今天开始呢,打算来介绍如何开发一款Android的天气软件,其中运用到的基础知识点也比较多,比较适合初学或者刚接触Android开发不久的同学一起来学习交流和切磋! 那么我先对这个天气软件进行需求分 ...

最新文章

  1. 【MATLAB】数组运算
  2. autosar can协议栈 源码解读_我用一晚上时间给女朋友讲懂CAN总线的AUTOSAR网络管理...
  3. Pocket pc模拟器与PC机传输文件的方法
  4. 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。...
  5. 迷失的毕业生——小余答疑(一)
  6. C++中绘图工具EasyX基本操作
  7. 前端学习(3335):ant design中按钮尺寸的大小
  8. CUDA编程之快速入门-----GPU加速原理和编程实现
  9. java 坦克大战_java课程设计之坦克大战
  10. 服务器芯片组思维导图,服务器思维导图
  11. vuedraggable嵌套块拖拽_vuedraggable 拖拽 应用 不同列表之间的拖拽
  12. 破解WIFI密码之密码字典
  13. MySQL OCP认证(文末附参考题)
  14. c语言pow函数原型_c语言中pow函数的用法是什么?_后端开发
  15. 英语不好学计算机特长,指导:英语学不好,是因为你没养成这些好习惯
  16. 【基于SVM的数据分类预测——意大利葡萄酒种类识别】的一些笔记
  17. 京剧猫主题曲用计算机弹奏,京剧猫电脑版
  18. JavaEE|IO、存储、硬盘、文件系统相关常识
  19. 重装win10遇到的坑
  20. HEG工具处理MOD02的产品,输出多波段

热门文章

  1. ASPack压缩可执行文件
  2. vim leader的使用
  3. leetcode-第13题 罗马数字转整数
  4. VINS-Mono关键知识点总结——边缘化marginalization理论和代码详解
  5. 巧用Q盘搭建SVN服务器
  6. Tinkpad笔记本双击开发Q盘不再提示创建恢复介质的对话框了,而且进入磁盘后文件夹是空的!
  7. Centos网络管理(三)-网络配置相关
  8. 【Java分享客栈】我为什么极力推荐XXL-JOB作为中小厂的分布式任务调度平台
  9. EXCEL单元格内怎么换行?Alt+Enter
  10. 秒杀项目的总结及面试常见问题