gson的使用

本文介绍如何使用Gson库实现JavaBean与JSON之间的相互转换,包括单个对象及集合类型的转换,并展示了如何解析不同类型的JSON数据。

一,使用 gson转换 json

   01:gson下载地址

             001:http://chengyinyin520

             002:谷歌下载,搜索 gson下载


  02:解析 json:

       2.1:先创建一个 实体类:

 

public class Person {

    private String name;

    private int age;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    @Override

    public String toString() {

        return name + ":" + age;

    }

}

在主函数中使用如下语句:

Person p = new Person();

p.setAge(22);

p.setName("Curry");

persons.add(p);   //Person对象加入到gson

String str = gson.toJson(p);

 

直接输出,得到以下结果:{"name":"Curry","age":22}


03,gson加入 list对象:

       

List persons = new ArrayList();

for (int i = 0; i < 3; i++) {

        Person p = new Person();

        p.setName("name" + i);

        p.setAge(i * 5);

        persons.add(p);

    }

String str = gson.toJson(persons);

将输出以下结果:(格式是数组类型的)[{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10}]


HashMap tool = new HashMap();

tool.put("ID", "22");

String str = gson.toJson(tool);

以上表示加入的对象本身就是Map类型的,则输出以下结果:{"ID":"22"}

 

而如果加入的JavaBean中还包括其他的List类型的数据,例如:(代码片段)

public class Person {

    private String name;

    private int age;

    private ArrayList car;

则输出结果变成这样:

[{"name":"name0","age":0,"car":["cc","ford"]},{"name":"name1","age":5,"car":["cc","ford"]},{"name":"name2","age":10,"car":["cc","ford"]}]

1、   解析JSON对象,将其还原为JavaBean,或者相应的数据类型

String json = "{\"name\":\"Duke\",\"address\":\"Menlo Park\",\"dateOfBirth\":\"Feb 1, 2000 12:00:00 AM\"}";//JSON格式的数据

Gson gson = new Gson();

Student student = gson.fromJson(json, Student.class);//指定了要还原的class,保存在gson中。

System.out.println("student.getName()  = " + student.getName());

System.out.println("student.getAddress() = " + student.getAddress());

System.out.println("student.getDateOfBirth() = "+ student.getDateOfBirth());  //可以直接从student对象中获取到所有数据了。

 

4、如果Json对象本身是List形式的,或者其他的类型,则采用以下方法:

可以借助TypeToken获取泛型参数的类型。

String json = "[{\"name\":\"Duke\",\"address\":\"Menlo Park\",\"dateOfBirth\":\"Feb 1, 2000 12:00:00 AM\"}]";

Gson gson = new Gson();

//使用Type类,取得相应类型对象的class属性。

Type listType=newTypeToken<ArrayList<Student>>(){}.getType();  //TypeToken内的泛型就是Json数据中的类型

        ArrayList list = gson.fromJson(json, listType);  //使用该class属性,获取的对象均是list类型的

        System.out.println("student.getName()  = " + list.get(0).getName());  //list中取得内容即可

        System.out.println("student.getAddress() = " + list.get(0).getAddress());

        System.out.println("student.getDateOfBirth() = "

                + list.get(0).getAddress());

 

 

因此,无论是把对象转化为Json格式,还是把Json格式还原为对象时,都需要确定好相应的数据类型或者 JavaBean的格式。这样就可以很方便的利益Gson进行转化了。



































Gson是一个用于处理JSON数据的Java库,以下是其使用方法和指南: ### 环境配置与依赖管理 若使用Maven项目,可在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>你选择的版本号</version> </dependency> ``` 若不使用Maven,可从`http://mvnrepository.com/artifact/com.google.code.gson/gson`选择版本,进入下载jar文件 [^2]。 ### 基本序列化/反序列化操作 #### 序列化(Java对象转JSON) ```java import com.google.gson.Gson; class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } } public class SerializationExample { public static void main(String[] args) { Person person = new Person("John", 30); Gson gson = new Gson(); String json = gson.toJson(person); System.out.println(json); } } ``` #### 反序列化(JSON转Java对象) ```java import com.google.gson.Gson; class Person { String name; int age; } public class DeserializationExample { public static void main(String[] args) { String json = "{\"name\":\"John\",\"age\":30}"; Gson gson = new Gson(); Person person = gson.fromJson(json, Person.class); System.out.println(person.name + " - " + person.age); } } ``` ### JSON元素类型与Java类型映射关系 | JSON元素类型 | Java类型 | | ---- | ---- | | JSON对象 | Java类 | | JSON数组 | Java数组或`List` | | JSON字符串 | `String` | | JSON数字 | `int`、`long`、`double`等 | | JSON布尔值 | `boolean` | | JSON null | `null` | ### GsonBuilder的详细配置选项和自定义功能 GsonBuilder可用于自定义Gson的行为,例如设置日期格式、排除字段等。 ```java import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.Date; class Person { String name; Date birthDate; public Person(String name, Date birthDate) { this.name = name; this.birthDate = birthDate; } } public class GsonBuilderExample { public static void main(String[] args) { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setDateFormat("yyyy-MM-dd"); Gson gson = gsonBuilder.create(); Person person = new Person("John", new Date()); String json = gson.toJson(person); System.out.println(json); } } ``` ### Gson常用注解 #### `@SerializedName` 用于指定JSON字段名与Java字段名的映射。 ```java import com.google.gson.annotations.SerializedName; class Person { @SerializedName("full_name") String name; int age; } ``` #### `@Expose` 用于指定哪些字段需要序列化或反序列化。 ```java import com.google.gson.annotations.Expose; class Person { @Expose String name; @Expose(serialize = false, deserialize = false) int age; } ``` ### TypeToken的使用 当处理泛型类型时,可使用`TypeToken`。 ```java import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; public class TypeTokenExample { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); Gson gson = new Gson(); String json = gson.toJson(list); Type listType = new TypeToken<List<String>>() {}.getType(); List<String> newList = gson.fromJson(json, listType); System.out.println(newList); } } ``` ### TypeAdapter的使用 `TypeAdapter`可用于自定义序列化和反序列化逻辑。 ```java import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import java.io.IOException; class Person { String name; int age; } class PersonTypeAdapter extends TypeAdapter<Person> { @Override public void write(JsonWriter out, Person person) throws IOException { out.beginObject(); out.name("name").value(person.name); out.name("age").value(person.age); out.endObject(); } @Override public Person read(JsonReader in) throws IOException { Person person = new Person(); in.beginObject(); while (in.hasNext()) { switch (in.nextName()) { case "name": person.name = in.nextString(); break; case "age": person.age = in.nextInt(); break; } } in.endObject(); return person; } } ``` ### @JsonAdapter的使用 `@JsonAdapter`可用于指定自定义的`TypeAdapter`。 ```java import com.google.gson.annotations.JsonAdapter; @JsonAdapter(PersonTypeAdapter.class) class Person { String name; int age; } ``` ### JsonDeserializer和JsonSerializer的使用 `JsonDeserializer`和`JsonSerializer`可用于自定义反序列化和序列化逻辑。 ```java import com.google.gson.*; import java.lang.reflect.Type; class Person { String name; int age; } class PersonDeserializer implements JsonDeserializer<Person> { @Override public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject jsonObject = json.getAsJsonObject(); Person person = new Person(); person.name = jsonObject.get("name").getAsString(); person.age = jsonObject.get("age").getAsInt(); return person; } } class PersonSerializer implements JsonSerializer<Person> { @Override public JsonElement serialize(Person src, Type typeOfSrc, JsonSerializationContext context) { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("name", src.name); jsonObject.addProperty("age", src.age); return jsonObject; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值