使用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在上面。

运行结果:

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。 Gson里最重要的对象有2个GsonGsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象 下面是几个小例子 1. toJson() example Java 代码 收藏代码 1. class TestObjectToJson { 2. private int data1 = 100; 3. private String data2 = "hello"; 4. } 5. 6. TestObjectToJson obj = new TestObjectToJson(); 7. Gson gson = new Gson(); 8. String json = gson.toJson(obj); class TestObjectToJson { private int data1 = 100; private String data2 = "hello"; } TestObjectToJson obj = new TestObjectToJson(); Gson gson = new Gson(); String json = gson.toJson(obj); 会输出 {"data1":100,"data2":"hello"} 2. fromJson() example Java 代码 收藏代码 1. import com.google.gson.Gson; 2. 3. class TestJsonFromObject { 4. private int data1; 5. private String data2; 6. } 7. 8. String json = "{'data1':100,'data2':'hello'}"; 9. Gson gson = new Gson(); 10. TestJsonFromObject obj = gson.fromJson(json, TestJsonFromObject.class); import com.google.gson.Gson; class TestJsonFromObject { private int data1; private String data2; } String json = "{'data1':100,'data2':'hello'}"; Gson gson = new Gson(); TestJsonFromObject obj = gson.fromJson(json, TestJsonFromObject.class); 3. 将Java对象的属性转换成指定的JSON名字 Java 代码 收藏代码 1. import com.google.gson.FieldNamingPolicy; 2. import com.google.gson.Gson; 3. import com.google.gson.GsonBuilder; 4. import com.google.gson.annotations.SerializedName; 5. 6. public class TestGson { 7. 8. @SerializedName("first_field") 9. private String field1; 10. 11. private String secondField; 12. 13. public TestGson(String param1, String param2) { 14. field1 = param1; 15. secondField = param2; 16. } 17. } 18. 19. TestGson obj = new TestGson("aaaa", "bbbbb"); 20. Gson gson = new Gson
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值