使用Gson解析Json数据

目录

目录

一、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在上面。

运行结果:

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gson 是 Google 提供的一个用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库,它可以将 JSON 字符串转换为 Java 对象,也可以将 Java 对象转换为 JSON 字符串。下面是使用 Gson解析 JSON 数据的示例代码: 1. 添加 GSON 依赖 在项目的 build.gradle 文件中添加以下依赖: ```groovy dependencies { // ... implementation 'com.google.code.gson:gson:2.8.6' // ... } ``` 2. 定义 Java 类 首先,我们需要定义一个 Java 类来表示 JSON 数据的结构。假设我们要解析JSON 数据格式如下: ```json { "name": "张三", "age": 20, "isMale": true } ``` 那么,我们可以定义一个对应的 Java 类: ```java public class Person { private String name; private int age; private boolean isMale; // 构造函数、getters 和 setters 略 // ... } ``` 3. 解析 JSON 数据 接下来,我们可以使用 Gson 类的`fromJson()`方法将 JSON 字符串转换为 Java 对象。示例代码如下: ```java String jsonData = "{\"name\":\"张三\",\"age\":20,\"isMale\":true}"; // 替换成你要解析JSON 数据 Gson gson = new Gson(); Person person = gson.fromJson(jsonData, Person.class); ``` 以上代码中,`fromJson()`方法的第一个参数是要解析JSON 字符串,第二个参数是要转换为的 Java 类的类型。Gson 会自动将 JSON 中的字段映射到 Java 对象的属性中。 现在,`person`对象中就包含了从 JSON 字符串中解析出来的数据。我们可以通过调用`person.getName()`、`person.getAge()`等方法获取属性的值。 注意:使用 Gson 解析 JSON 数据的前提是,JSON 字符串的字段名要与 Java 对象的属性名匹配。如果不匹配,需要通过`@SerializedName`注解或`FieldNamingStrategy`接口来指定对应关系。具体使用方法可以参考 Gson 的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值