Android 中使用Gson完成对象的序列化与反序列化

简介: Android 中使用Gson完成对象的序列化与反序列化

前言:

  1. JSON(JavaScript ObjectNotation):是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
    具体的JSON数据格式内容如:
[{"id":"5","version":"1.0","name":"Android"},{"id":"6","version":"2.0","name":"JAVA"},{"id":"7","version":"3.0","name":"JavaScript"}]

其中: 中括号表示数据,大括号表示对象,分号用来分隔键和值,逗号用来分隔一个对象中的多个键值对。

Json数组:[ ]

Json对象:{ }

  1. Gson简介:Gson是Google提供的用来在java对象和json数据之间进行映射的java类库,可以将一个JSON字符串转成一个java对象(反序列化),或者将java对象转成一个JSON字符串(序列化)。

再详细介绍一下序列化与反序列化

序列化:把对象转换为字节序列的过程称为对象的序列化。(换句话说就是:把网络上传输的对象来转换为字节序列,意思就是把JavaBean对象转换为String的字符串,String已经实现了Serializable接口,已经实现序列化了)

反序列化:把字节序列恢复为对象的过程称为对象的反序列化。(是把网络上传输的序列化String字符串,恢复成JavaBean对象,就是将String的字符串转换为JavaBean对象)

在Android 下build.gradle下引入依赖:

implementation ‘com.google.code.gson:gson:2.8.6’

接下来用一个使用Gson将Student类型对象进行序列化,与反序列

1.Student类进行初始化:

package com.example.spdemo.bean;
public class Student {
    private String name;
    private String sex;
    private int age;
    private String hobby;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    public Student(String name, String sex, int age, String hobby) {
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.hobby = hobby;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", hobby='" + hobby + '\'' +
                '}';
    }
}

2.之后在MainActivity中,进行序列化与反序列化

Student student = new Student("小张","男",20,"读书");
        //声明Gson对象
        Gson gson = new Gson();
        //序列化student对象  序列化:将对象转化为json字符串
        String s = gson.toJson(student);
        System.out.println(s);
        //反序列化   反序列化:将json字符串重新恢复成对象
        Student s1 = gson.fromJson(s,Student.class);
        System.out.println("姓名:"+s1.getName()+"性别:"+s1.getSex()+"年龄:"+s1.getAge()+"爱好:"+s1.getHobby());

后台输出:

使用Gson,将json字符串,序列化为Map集合

public void testJsonToMap() {
        String jsonString = "{\"my name\":\"tom\",\"1\":12}";
        Map<String, Object> map = new Gson().fromJson(jsonString, new TypeToken<Map<String, Object>>() {
        }.getType());
//        Log.i(TAG, "testJsonToMap: " + map.toString());
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            Log.i(TAG, key + ":" + map.get(key));
        }
    }

以上就是简单的使用Gson进行序列化与反序列化。

1、使用Android原生API,将json字符串反序列化为java对象

public void jsonTest() {
        String jsonString = "{\"id\":2, \"name\":\"大虾\", \"price\":12.3,\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"}";
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            int id = jsonObject.getInt("id");
            String name = jsonObject.getString("name");
            double price = jsonObject.getDouble("price");
            String imagePath = jsonObject.getString("imagePath");
            ShopInfo shopInfo = new ShopInfo(id, name, price, imagePath);
            Log.i(TAG, "jsonTest: " + shopInfo.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

2、使用Android原生API,将json字符串反序列化为List集合

private void testJsonToList() {
        String jsonString = "[{\"id\":2, \"name\":\"大虾\", \"price\":12.3,\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"}," +
                "{\"id\":5, \"name\":\"鲍鱼\", \"price\":12.3,\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f2.jpg\"}]";
        List<ShopInfo> shopInfoList = new ArrayList<>();
        //1.将json字符串包装JSONArray对象
        try {
            JSONArray jsonArray = new JSONArray(jsonString);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                int id = jsonObject.getInt("id");
                String name = jsonObject.getString("name");
                double price = jsonObject.getDouble("price");
                String imagePath = jsonObject.getString("imagePath");
                ShopInfo shopInfo = new ShopInfo(id, name, price, imagePath);
                shopInfoList.add(shopInfo);
            }
            Log.i(TAG, "testJsonToList: " + shopInfoList);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }


目录
相关文章
|
20天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
JSON 前端开发 数据格式
前端的全栈之路Meteor篇(五):自定义对象序列化的EJSON介绍 - 跨设备的对象传输
EJSON是Meteor框架中扩展了标准JSON的库,支持更多数据类型如`Date`、`Binary`等。它提供了序列化和反序列化功能,使客户端和服务器之间的复杂数据传输更加便捷高效。EJSON还支持自定义对象的定义和传输,通过`EJSON.addType`注册自定义类型,确保数据在两端无缝传递。
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
2月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
29 0
|
存储 Java Android开发
Android 序列化(Serializable和Parcelable)
🔥 什么是序列化 由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。 🔥 为什么序列化 永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中)。 对象在网络中传递。 对象在IPC间传递。
263 0
Android 序列化(Serializable和Parcelable)
|
9天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
14天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
16天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。