IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android中Gson的使用 -> 正文阅读

[移动开发]Android中Gson的使用

什么是Gson

Gson 是一个Java库,可用于将Java对象转换为它们的Json 表示形式。它还可以用于将Json 字符串转换为等效的Java对象。Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 FastJson 两种,这里要介绍的是 Gson。
Gson 的 GitHub 主页点击这里:Gson

如何下载

Gradle:

dependencies {
  implementation 'com.google.code.gson:gson:2.8.9'
}

Json的生成

new Gson().toJson(obj)

Json的解析

Object sss= new Gson().fromJson(json, Object.class);

复杂类型

Map<String,Object> ss= new Gson().fromJson(json, new TypeToken<Map<String,Object>>(){}.getType());

Gson注解

首先我们定义一个场景。

定义Album 类代表专辑,专辑中有很多歌曲Song

public class Album{
    
    private String name;
    
    private float price;
    
    private List<Song> songs = new ArrayList<Song>();

    // generated getters and setters.
    ...
}

定义Song 类代表歌曲,歌曲附属于专辑Album

public class Song{
    
    private String name;
    
    private int duration;
    
    private Album album;

    // generated getters and setters.
    ...
}

赋值

//先定义一个专辑
Album album = new Album();
album.setName("叶惠美");
album.setPrice(10.00f);

//再定义专辑中的两首歌
Song song1 = new Song();
//song1.setAlbum(album);//此时必须注释,不然引用循环了
song1.setDuration(240);
song1.setName("以父之名");

Song song2 = new Song();
//song2.setAlbum(album);//此时必须注释,不然引用循环了
song2.setDuration(180);
song2.setName("晴天");

//将两首歌都添加为专辑的子项
List<Song> songList = new ArrayList<>();
songList.add(song1);
songList.add(song2);
album.setSongs(songList);

String json = new Gson().toJson(album);

得到Json字符串

{"name":"叶惠美","price":10.0,"songs":[{"duration":240,"name":"以父之名"},{"duration":180,"name":"晴天"}]}

此时有个问题,这是把song中的album注释掉才跑通的,但是实际的项目中你不可能在转换为Json字符串之前把album置为null之后再进行Json转换。Gson中有个办法可以解决:增加注释

public class Song{

    @Expose
    private String name;
    
    @Expose
    private int duration;

    private Album album;
}

public class Album{

    @Expose
    private String name;
    
    @Expose
    private float price;
    
    @Expose
    private List<Song> songs = new ArrayList<Song>();
}

调用

String json = new GsonBuilder()
	.excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性
   	.create().toJson(album);

按自定义顺序输出Json

其实对象转为Json字符串时,顺序是按照首字母a到z的顺序排列的,但有时就是有那么一些特殊的需求需要自定义顺序

public class AlbumTypeAdapter extends TypeAdapter<Album> {

    /**
     * Writes one JSON value (an array, object, string, number, boolean or null)
     * for {@code value}.
     *
     * @param out
     * @param value the Java object to write. May be null.
     */
    @Override
    public void write(JsonWriter out, Album value) throws IOException {
        out.beginObject();
        //按自定义顺序输出字段信息
        out.name("1").value(value.getName());
        out.name("2").value(value.getPrice());
        out.name("3");
        out.beginArray();
        for(int i =0;i<value.getSongs().size();i++){
        	out.value(value.getSongs().get(i));
        }
        out.endArray();
        out.endObject();
    }

    /**
     * Reads one JSON value (an array, object, string, number, boolean or null)
     * and converts it to a Java object. Returns the converted object.
     *
     * @param in
     * @return the converted Java object. May be null.
     */
    @Override
    public Step read(JsonReader in) throws IOException {
        return null;
    }
}

调用

String json = new GsonBuilder()
	.registerTypeAdapter(Album.class,new AlbumTypeAdapter());
   	.create().toJson(album);
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:57:11  更:2021-11-16 18:58:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:47:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码