其实,要创建和解析JSON数据,也可以使用GSON来完成。GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用GSON,可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的JSON数据。

GSON的两个重要方法

  在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法。其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,fromJson()方法则用来实现将JSON数据转换为相应的Java对象。

toJson()方法

  toJson()方法用于将Java对象转换为相应的JSON数据,主要有以下几种形式:

  (1)String toJson(JsonElement jsonElement);

  (2)String toJson(Object src);

  (3)String toJson(Object src, Type typeOfSrc);

  其中,方法(1)用于将JsonElement对象(可以是JsonObject、JsonArray等)转换成JSON数据;方法(2)用于将指定的Object对象序列化成相应的JSON数据;方法(3)用于将指定的Object对象(可以包括泛型类型)序列化成相应的JSON数据。

fromJson()方法

  fromJson()方法用于将JSON数据转换为相应的Java对象,主要有以下几种形式:

  (1)<T> T fromJson(JsonElement json, Class<T> classOfT);

  (2)<T> T fromJson(JsonElement json, Type typeOfT);

  (3)<T> T fromJson(JsonReader reader, Type typeOfT);

  (4)<T> T fromJson(Reader reader, Class<T> classOfT);

  (5)<T> T fromJson(Reader reader, Type typeOfT);

  (6)<T> T fromJson(String json, Class<T> classOfT);

  (7)<T> T fromJson(String json, Type typeOfT);

  以上的方法用于将不同形式的JSON数据解析成Java对象。

下面为具体的演示:

1.利用gson解析json字符串为单个对象
{
    "createDate": "2015-02-01 10:39:50",
    "id": "1",
    "name": "传说之美",
    "password": "123456"
}
先定义一个account类,属性有id、name、password、createDate。
 
public class Account {
    private String id;
    private String password;
    private String name;
    private String createDate;
    public Account() {
        super();
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCreateDate() {
        return createDate;
    }
    public void setCreateDate(String createDate) {
        this.createDate = createDate;
    }
    @Override
    public String toString() {
        return "Account [id=" + id + ", password=" + password + ", name=" + name + ", createDate=" + createDate + "]\n\n";
    }
}
// 利用gson解析json字符串为单个对象
Account account1 = gson.fromJson(jsonString, Account.class);
2.利用gson解析json字符串为单个数组
[
    {
        "id": "2",
        "createDate": "2015-02-01 11:21:27",
        "password": "123456",
        "name": "传说"
    },
    {
        "id": "2",
        "createDate": "2015-02-01 11:21:27",
        "password": "123456",
        "name": "之美"
    }
]
// 更快捷地解析成List
Type listType = new TypeToken<ArrayList<Account>>(){}.getType();
ArrayList<Account> accsList = new Gson().fromJson(accountArray.toString(), listType);
3.利用Gson解析对象嵌套对象的json
 
嵌套的json类似如下
  
{
    "member": {
        "id": "4",
        "name": "我是传说"
    },
    "id": "4",
    "createDate": "2015-02-02 12:03:32",
    "password": "888888",
    "name": "传说之美"
}
1、定义一个member类
 
public class Member {
    private String id;
    private String name;
    public Member() {
        super();
    }
        public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Member [id=" + id + ", name=" + name + "]\n\n";
    }
}
3.1如果单纯的解析里面的json对象,可以这样做:
  // 这里用isNull来判断是否存在这个object,存在就拿出member的JSONObject
JSONObject memberObject = null;
if(!object.isNull("member")){
    try {
        memberObject = object.getJSONObject("member");
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
Member member5 = null;
if(null != memberObject){
    member5 = gson.fromJson(memberObject.toString(), Member.class);
    Log.i("解析对象嵌套对象的json", member5.toString());
}
3.2如果解析整个数据:
定义一个类
 public class AccountObject {
    private String id;
    private String password;
    private String name;
    private String createDate;
    private Member;
    ..............省略了get和set方法,可自行补充
    @Override
    public String toString() {
        return "AccountObject [id=" + id + ", password=" + password + ", name=" + name + ", createDate=" + createDate + ","+ member.toString() + "]\n\n";
    }
}
生成json并解析
 AccountObject accountObject = gson.fromJson(object.toString(), AccountObject.class);
4.利用Gson解析对象里面嵌套对象和数组

String json = {"a":"100","b":[{"b1":"b_value1","b2":"b_value2"},{"b1":"b_value1","b2":"b_value2"}],"c":{"c1":"c_value1","c2":"c_value2"}}
                首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些:
                public class JsonBean {
                         public String a;
                         public List<B> b;
                         public C c;

public static class B {
                                  public String b1;
                                  public String b2;
                        }
    
                        public static class C {
                                 public String c1;
                                 public String c2;
                       }
              }
             很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:
             1、内部嵌套的类必须是static的,要不然解析会出错;
             2、类里面的属性名必须跟Json字段里面的Key是一模一样的;
             3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<B> b,而只用{}嵌套的就定义为 public C c,
                  具体的大家对照Json字符串看看就明白了,不明白的我们可以互相交流,本人也是开发新手!
              Gson gson = new Gson();
              java.lang.reflect.Type type = new TypeToken<JsonBean>() {}.getType();
              JsonBean jsonBean = gson.fromJson(json, type);
              然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!

Android利用Gson解析Json数据相关推荐

  1. Android中Gson解析json数据使用@SerializedName注解

    @SerializedName 此注解作用在属性上,表明这个属性在序列化成Json的时候,需要将名字序列化成注解的value属性指定的值. 我们有一段json数据如下: { "id" ...

  2. gson解析php,php,android_关于 Gson 解析JSON数据。。。,php,android - phpStudy

    关于 Gson 解析JSON数据... 1.首先,我是从服务器端传回来的JSON数据如下: {"info":"succeed","user_id&qu ...

  3. Okhttp源码分析以及Google Gson解析json数据实例

    Okhttp Github的Okhttp OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接 透明的GZIP压缩减少响 ...

  4. JSONObject 和 GSON 解析 JSON 数据详解(转)

    转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...

  5. Android之GSON解析JSON

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库. 比如: <pre name="code" class=" ...

  6. Gson解析JSON数据中动态未知字段key的方法

    转载自:https://blog.csdn.net/jdsjlzx/article/details/76785239 有时在解析json数据中的字段key是动态可变的时候,由于Gson是使用静态注解的 ...

  7. Android用GSon处理Json数据

    此篇接上篇 Android访问WCF(下篇)-客户端开发 将服务器获取的JSON数据通过GSON这个类库, 进行反序列化, 并通过UI显示出来. 如何在Android平台上用GSON反序列化JSON数 ...

  8. Android 使用Gson解析json用法

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

  9. Android 使用Gson解析json案例详解

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

最新文章

  1. 【剑指offer-Java版】23从上往下打印二叉树
  2. html标题怎么分开,html – 如何使用angularjs将标签标题与其主体分开?
  3. springboot 入门二- 读取配置信息一
  4. 2021-2025年中国中压额定母线槽行业市场供需与战略研究报告
  5. Python 学习笔记 - 协程
  6. 活动推荐 | 首届云原生编程挑战赛开始报名啦~
  7. 纯HTML个人简历模板代码
  8. 修改数据库密码的多种方法
  9. mui android 模拟器,MUI框架-07-HBuilder+夜神安卓模拟器
  10. Redis:只刷面试题,怎可能进大厂,多理解原理(RDB 持久化、AOF持久化)
  11. 数据产品经理该懂的python技术
  12. EWASM Gas Costs——gas 计算
  13. LeetCode 299猜数字游戏
  14. ADC模数转换器(STM32系列)
  15. 现代化医院PACS/RIS系统概述
  16. css3探测光圈_CSS3按钮鼠标悬浮实现光圈效果
  17. 汽车中控linux系统,特斯拉的中控系统为什么是Linux而不是Android?
  18. Service id not legal hostname (service_cmn)
  19. 编码通信与魔术初步(七)——二进制编码经典魔术《街头猜数字》
  20. 欧氏距离与曼哈顿距离

热门文章

  1. win11怎么连接共享打印机进行打印
  2. 支持多种格式转换的PDF转换成PPT转换器
  3. 常用存储设备优缺点辨析
  4. python psycopg2_Python:使用psycopg2模块操作PostgreSQL
  5. 2022祥云杯---Crypto
  6. mac os 和iphone、ipad 设备死机分析
  7. 郑州挺住!计算机视觉“为“雨绸缪(附溺水检测论文)
  8. python 网易公开课官网_哪里有python视频教程全集下载?
  9. NetworkSecurity
  10. 《Contrast Limited Adaptive Histogram Equalization》自译