上一篇博客,Android-解析JSON数据(JSON对象/JSON数组)介绍了使用 org.json.JSONArray;/org.json.JSONObject; 来解析JSON数据;

Google Android 还提供来另外一种方式来解析JSON数据,那就是Gson;

Gson是非常方便的JSON解析/封装/处理等等,强大的工具类:

  特点:Gson可以把JSON对象数据->转换映射为Bean对象

       Gson可以把JSON数组数据->转换映射为集合

     Gson可以把Bean对象->转换为JSON对象数据

     Gson可以把集合->转换为JSON数组数据

        ........... 

首先要在app/build.gradle配置文件中,导入,Gson支持包

// Gson支持包的导入
implementation 'com.google.code.gson:gson:2.6.2'

需要解析的JSON数据:

/data/data/liudeli.mynetwork01/files/pottingJSON1

{
"name":"李四",
"age":99,
"hobby":"爱好是练习截拳道"
}

/data/data/liudeli.mynetwork01/files/pottingJSONArray1

[
{
"name":"君君",
"age":89,
"sex":"男"
},
{
"name":"小君",
"age":99,
"sex":"女"
},
{
"name":"大君",
"age":88,
"sex":"男"
}
]

定义一个Bean
定义的name/age/hobby 必须要和JSON数据里面的一模一样

package liudeli.mynetwork01.entity;

/**
* 定义一个Bean
* 定义的name/age/hobby 必须要和JSON数据里面的一模一样
* {
* "name":"李四",
* "age":99,
* "hobby":"爱好是练习截拳道"
* }
*/
public class Student2 { private String name;
private int age;
private String hobby; public Student2(String name, int age, String hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
} @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", hobby='" + hobby + '\'' +
'}';
}
}

定义的name/age/sex 必须要和JSON数据里面的一模一样

package liudeli.mynetwork01.entity;

/**
* 定义一个Bean
* 定义的name/age/sex 必须要和JSON数据里面的一模一样
*
* [
* {
* "name":"君君",
* "age":89,
* "sex":"男"
* },
* {
* "name":"小君",
* "age":99,
* "sex":"女"
* },
* {
* "name":"大君",
* "age":88,
* "sex":"男"
* }
* ]
*/
public class Student { private String name;
private int age;
private String sex; public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
} @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}

GsonAnalyzeJSONActivity.java

package liudeli.mynetwork01;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List; import liudeli.mynetwork01.entity.Student;
import liudeli.mynetwork01.entity.Student2; public class GsonAnalyzeJSONActivity extends Activity { private final String TAG = GsonAnalyzeJSONActivity.class.getSimpleName(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_gson_analyze);
} /**
* Gson解析JSON对象
* {
* "name":"李四",
* "age":99,
* "hobby":"爱好是练习截拳道"
* }
*/
public void gonsAnalyzeJSONObject(View view) {
String jsonData = readFile("pottingJSON1");
// Log.d(TAG, "jsonData:" + jsonData); Gson gson = new Gson();
Student2 student2 = gson.fromJson(jsonData, Student2.class);
Log.d(TAG, "gonsAnalyzeJSONObject 解析后的结果:" + student2.toString());
} /**
* Gson解析JSON数组
* [
* {
* "name":"君君",
* "age":89,
* "sex":"男"
* },
* {
* "name":"小君",
* "age":99,
* "sex":"女"
* },
* {
* "name":"大君",
* "age":88,
* "sex":"男"
* }
* ]
* @param view
*/
public void gonsAnalyzeJSONArray(View view) {
String jsonData = readFile("pottingJSONArray1");
// Log.d(TAG, "jsonData:" + jsonData); Gson gson = new Gson(); /**
* TypeToken<List<需要映射的Bean对象>>(){}.getType()
*/
List<Student> list = gson.fromJson(jsonData, new TypeToken<List<Student>>(){}.getType()); // 参数二:需要指定类型,类型来决定解析的集合 for (Student student: list) {
Log.d(TAG, "gonsAnalyzeJSONArray 解析后的结果:" + student.toString());
} } /**
* 读取文件里面的字符串
* @param fileName
* @return
*/
private String readFile(String fileName) {
String result = null;
try {
InputStream inputStream = openFileInput(fileName); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] bytes = new byte[inputStream.available()]; inputStream.read(bytes); baos.write(bytes, 0,bytes.length); result = new String(baos.toByteArray()); baos.close();
inputStream.close(); } catch (Exception e) {
e.printStackTrace();
}
return result;
}
}

activity_gson_analyze.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gson解析JSON对象"
android:onClick="gonsAnalyzeJSONObject"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gson解析JSON数组"
android:onClick="gonsAnalyzeJSONArray"
/> </LinearLayout>

日志的打印:

使用Gson解析,JSON对象数据:

12-23 23:00:52.108 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONObject 解析后的结果:Student{name='李四', age=99, hobby='爱好是练习截拳道'}

使用Gson解析,JSON数组数据:

12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name='君君', age=89, sex='男'}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name='小君', age=99, sex='女'}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name='大君', age=88, sex='男'}

Android-Gson解析JSON数据(JSON对象/JSON数组)的更多相关文章

  1. 用Gson解析没有数据头的纯数组json字符串

    无数据头Json字符串 Json字符串只有数组,而次数组没有名字,如下 [ { "name": "zhangsan", "age": &qu ...

  2. 让复杂Json数据和对象自由转换 --- Gson

    Gson是谷歌用于对Json操作的库,里面有着强大而又方便的功能,最常用的就是 fromJson():将json数据转化为对象: toJson():将对象转化为json数据! 对于普通的json数据使 ...

  3. JS解析json数据并将json字符串转化为数组的实现方法

    json数据在ajax实现异步交互时起到了很重要的作用,他可以返回请求的数据,然后利用客户端的js进行解析,这一点体现出js的强大,本文介绍JS解析json数据并将json字符串转化为数组的实现方法, ...

  4. HttpServletResponse 返回的json数据不是json字符串,而是json对象

    今天在改一个bug 情况: 在spring boot中写了一个类Result ,用来统一封装 各个API响应结果 , 其中重写了toString()方法来返回 json字符串 . 在正常情况下,从其它 ...

  5. Jquery Ajax和getJSON获取后台普通Json数据和层级Json数据解析

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 如何构建JSON数据,JSON数据的格式,JSON数据的获取

    假设你是用$.getJSON();方法获取JSON数据$.getJSON(url,{"Action":"getStudent"},function(data){ ...

  7. JS:字符串转成json数据,和json转成字符串方法 iframe获取父级传过来的数据

    字符串转成json数据,和json转成字符串方法 //转为JSON adinfo=JSON.parse(adinfo) //转为字符串 adinfo=JSON.stringify(adinfo) 大概 ...

  8. js 中 json.stringfy()将对象、数组转换成字符串

    json.stringfy()将对象.数组转换成字符串 var student = new Object(); student.name = "Lanny"; student.ag ...

  9. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  10. Android Gson解析json详解

    目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://co ...

随机推荐

  1. .NET后台访问其他站点代码整理

    HttpWebRequest request = WebRequest.Create(@"http://localhost:8080/mail/SendMail") as Http ...

  2. 32位汇编基础_cpu 寄存器

    32位通用寄存器 EAX EBX ECX EDX EBP ESP ESI EDI 八个寄存器都可以作为普通的数据寄存器使用.但有的有特殊的用途: EAX    为累加器, ECX    为计数器, E ...

  3. [原]Android 开发第一步

    使用 android-studio 开发 写文章时的最新 Android-Studio 程序下载:https://dl.google.com/dl/android/studio/ide-zips/3. ...

  4. Windows 远程桌面连接Ubuntu16.04图像界面

    1.安装xrdp sudo apt-get install xrdp 2. 安装vnc4server sudo apt-get install vnc4server 3. 安装xubuntu-desk ...

  5. upstream prematurely closed connection while reading response header from upstream

    upstream prematurely closed connection while reading response header from upstream nginx配置uwsgi的时候  ...

  6. 在ubuntu14.04上搭建OpenVPN服务

    简介 在连接了不可信的网络环境后,让手机或者计算机安全的访问互联网,使用虚拟专用网络(Virtual Private Network,VPN)是一个解决办法.OpenVPN是一个SSL VPN完整解决 ...

  7. 字符串转码 将文本转为PDF

    @Test public void testBasic64Code() throws Exception { String strdata = new String("how are you ...

  8. mybatis 2 -常用数据操作

    1.写入数据并获取自增ID XML配置: <!-- 写入数据获取自增ID --> <insert id="insertLog" parameterType=&qu ...

  9. 29.OGNL与ValueStack(VS)-总结OGNL[重点]

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html OGNL是Object Graphic Navigation Languag ...

  10. Spring JDBC Framework详解——批量JDBC操作、ORM映射

    转自:https://blog.csdn.net/yuyulover/article/details/5826948 一.spring JDBC 概述 Spring 提供了一个强有力的模板类JdbcT ...