目录

目录

一、Gson介绍

1、常用方法:

2、 Gson的注解:

二、使用方法

完整代码:

MainActivity:

布局:

运行结果:

一、Gson介绍

        Gson是Google提供的一个Java库,用于将Java对象转换为JSON格式数据或将JSON格式数据转换为Java对象。

1、常用方法:

  • toJson(Object object):将Java对象转换为JSON字符串。该方法接受一个Java对象作为参数,并返回对应的JSON字符串。例如:
Person person = new Person("John", 25);
String json = gson.toJson(person);
  • fromJson(String json, Class<T> classOfT):将JSON字符串转换为Java对象。该方法接受一个JSON字符串和目标对象的Class类型作为参数,并返回对应的Java对象。例如:
String json = "{\"name\":\"John\",\"age\":25}";
Person person = gson.fromJson(json, Person.class);
  • toJsonTree(Object object):将Java对象转换为JsonElement对象。JsonElement对象是Gson库中表示JSON元素的抽象类,可以进一步操作或处理。例如:
Person person = new Person("John", 25);
JsonElement jsonElement = gson.toJsonTree(person);
  • fromJson(JsonElement json, Class<T> classOfT):将JsonElement对象转换为Java对象。该方法接受一个JsonElement对象和目标对象的Class类型作为参数,并返回对应的Java对象。例如:
JsonElement jsonElement = JsonParser.parseString("{\"name\":\"John\",\"age\":25}");
Person person = gson.fromJson(jsonElement, Person.class);
  • toJson(JsonElement jsonElement):将JsonElement对象转换为JSON字符串。该方法接受一个JsonElement对象作为参数,并返回对应的JSON字符串。例如:

 

JsonElement jsonElement = JsonParser.parseString("{\"name\":\"John\",\"age\":25}");
String json = gson.toJson(jsonElement);

2、 Gson的注解:

  • @SerializedName用于指定字段或方法在序列化和反序列化时的名称。当Java类中的字段名与JSON中的键名不一致时,可以使用该注解来进行映射。

  • @Expose用于标记字段或方法是否参与序列化和反序列化。默认情况下,Gson会将所有非transient的字段都包含在序列化和反序列化的过程中。通过添加@Expose注解,可以控制只有被标记的字段才会被处理。

  • @Since@Until用于标记字段或方法在特定版本范围内是否参与序列化和反序列化。@Since注解指定了字段或方法在某个特定版本之后生效,而@Until注解指定了字段或方法在某个特定版本之前生效。

  • @JsonAdapter用于指定自定义的TypeAdapter类,来控制字段或方法的序列化和反序列化过程。通过自定义TypeAdapter,可以实现更灵活的转换逻辑。

二、使用方法

Gson是Google提供的一个用于将Java对象与JSON数据进行互相转换的开源库。下面是使用Gson的详细方法:

1. 添加依赖

在你的Android项目中,需要在build.gradle文件中添加以下依赖:
dependencies {
    implementation 'com.google.code.gson:gson:2.8.7'
}

2. 创建Java类

首先需要创建一个Java类,这个Java类将与JSON对象进行互相转换。以下示例代码展示了一个Java类的基本结构:

package com.example.gsondemo;

public class Student {
    private String id;
    private String name;
    private int age;
    private String sex;

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3. 将Java对象转换为JSON字符串

使用Gson可以将Java对象序列化为JSON字符串。以下示例代码展示了如何使用Gson将User对象转换为JSON字符串:

Student student = new Student();
student.setId("001");
student.setName("xiaoming");
student.setAge(18);
student.setSex("男");
// 将对象转成json数据
String jsonStr = gson.toJson(student);

 下面是转化后的json数据

{
   "id":"001",
   "name":"xiaoming",
   "age":18,
   "sex":"男"
}

4. 将JSON字符串转换为Java对象

使用Gson可以将JSON字符串反序列化为Java对象。以下示例代码展示了如何使用Gson将JSON字符串转换为User对象:

// 将对象转成json数据
String jsonStr = gson.toJson(student);
// 将json解析成对象数据
Student s = gson.fromJson(jsonStr,Student.class);
et5.setText(s.getId()+" "+s.getName()+" "+s.getAge()+" "+s.getSex());

通过以上几步,您就可以使用Gson轻松地将Java对象与JSON数据进行互相转换。

完整代码:

MainActivity:

package com.example.gsondemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
Button btn;
EditText et1,et2,et3,et4,et5;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Gson gson= new Gson();
                Student student = new Student();
                student.setId("001");
                student.setName("xiaoming");
                student.setAge(18);
                student.setSex("男");
                // 将对象转成json数据
                String jsonStr = gson.toJson(student);
                et1.setText(jsonStr);
                // 第二种列表数据
                List<String> list = Arrays.asList("1","ad","12","134");
                et2.setText(gson.toJson(list));
                // 第三种映射对象
                Map<String,Object> content = new HashMap<>();
                content.put("id","002");
                content.put("name","xiaohua");
                content.put("sex","女");
                content.put("age",18);
                et3.setText(gson.toJson(content));
                // 使用GSON的fromJson方法
                // 解析复杂数据需要Type来解析或生成JSON数据。
                Type type = new TypeToken<ArrayList<String>>(){}.getType();
                ArrayList<String> sList = gson.fromJson(list.toString(),type);
                et4.setText(sList.toString());
                // 将json解析成对象数据
                Student s = gson.fromJson(jsonStr,Student.class);
                et5.setText(s.getId()+" "+s.getName()+" "+s.getAge()+" "+s.getSex());
            }
        });
    }

    private void initView() {
        btn = findViewById(R.id.btn);
        et1 = findViewById(R.id.et1);
        et2 = findViewById(R.id.et2);
        et3 = findViewById(R.id.et3);
        et4 = findViewById(R.id.et4);
        et5 = findViewById(R.id.et5);
    }
}

布局:

<?xml version="1.0" encoding="UTF-8"?>

    <LinearLayout
    android:paddingTop="16dp"
    android:paddingRight="16dp"
    android:paddingLeft="16dp"
    android:paddingBottom="16dp"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/btn"
        android:layout_alignParentTop="true"
        android:text="GSON TEST"/>

    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/et1"
        android:text="FromObjectToJsonData"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="11dp"
        android:inputType="textPersonName"/>

    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/et2"
        android:text="FromListDataToJsonData"
        android:layout_below="@+id/et1"
        android:inputType="textPersonName"
        android:ems="10"/>

    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/et3"
        android:text="FromMapDataToJsonData"
        android:layout_below="@+id/et2"
        android:layout_marginTop="11dp"
        android:inputType="textPersonName"/>



    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/et4"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:text="FromJsonToComplexData"
        android:layout_below="@+id/textView2"
        android:inputType="textPersonName"
        android:ems="10"/>
    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/et5"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:text="FromJsonToObjectData"
        android:layout_below="@+id/textView2"
        android:ems="10"/>

</LinearLayout>

 Student在上面。

运行结果:

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐