Gson 反序列化 JSON 设置默认值:最简便方法
使用 Gson 反序列化 JSON 并设置不存在的字段默认值的方法是创建一个自定义的反序列化适配器(TypeAdapter)。\n\n首先,你需要创建一个包含默认值的 POJO 类,用于存储反序列化后的 JSON 数据。例如,假设你的 JSON 数据如下:\n\njson\n{\n "name": "John",\n "age": 25\n}\n\n\n你可以创建一个对应的 POJO 类:\n\njava\npublic class Person {\n private String name;\n private int age;\n private String gender = "Unknown"; // 设置默认值\n\n // getters and setters...\n}\n\n\n接下来,创建一个自定义的反序列化适配器,该适配器将处理不存在的字段并设置默认值。你可以通过继承 TypeAdapter 类来创建适配器:\n\njava\nimport com.google.gson.TypeAdapter;\nimport com.google.gson.stream.JsonReader;\nimport com.google.gson.stream.JsonWriter;\n\nimport java.io.IOException;\n\npublic class PersonAdapter extends TypeAdapter<Person> {\n @Override\n public void write(JsonWriter out, Person value) throws IOException {\n // 不需要实现,因为我们只关心反序列化\n }\n\n @Override\n public Person read(JsonReader in) throws IOException {\n Person person = new Person();\n\n in.beginObject();\n while (in.hasNext()) {\n switch (in.nextName()) {\n case "name":\n person.setName(in.nextString());\n break;\n case "age":\n person.setAge(in.nextInt());\n break;\n default:\n in.skipValue(); // 跳过不需要的字段\n break;\n }\n }\n in.endObject();\n\n return person;\n }\n}\n\n\n在适配器的 read 方法中,我们只处理 name 和 age 字段,如果遇到其他字段,我们使用 in.skipValue() 方法跳过它们。\n\n最后,我们可以使用 Gson 注册自定义适配器并进行反序列化:\n\njava\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\n\npublic class Main {\n public static void main(String[] args) {\n String json = "{\"name\":\"John\",\"age\":25,\"gender\":\"Male\"}";\n\n Gson gson = new GsonBuilder()\n .registerTypeAdapter(Person.class, new PersonAdapter())\n .create();\n\n Person person = gson.fromJson(json, Person.class);\n\n System.out.println(person.getName()); // 输出:John\n System.out.println(person.getAge()); // 输出:25\n System.out.println(person.getGender()); // 输出:Unknown\n }\n}\n\n\n在上面的示例中,我们将自定义适配器注册到 Gson 实例中,并使用 fromJson 方法将 JSON 反序列化为 Person 对象。由于 gender 字段在 JSON 中不存在,它将被设置为默认值 "Unknown"。\n\n这样,你就可以使用 Gson 反序列化 JSON 并设置不存在字段的默认值了。
原文地址: https://www.cveoy.top/t/topic/qalX 著作权归作者所有。请勿转载和采集!