如何在GSON

时间:2019-04-26 18:40:42

标签: java json gson

我有一个JSON对象,它实际上是序列化的Java对象。 JSON对象就是这样

{
  user: 'user',
  telephone: '123456789'
}

java对象的电话字段已从“电话”重命名为“移动”。因此,现在java对象具有以下字段。

  • 用户
  • 移动

我想做的是数据迁移。我想以JSON字符串的形式从数据库中获取数据->并使用GSON将JSON解析为java对象(到目前为止,我们使用gson.fromJson(class,data)方法)保留该值在电话中(因为电话现在不在java类中的字段中)-这样我就可以将该数据传递到新的字段(移动设备中)。

我该怎么做?

P.S。 :-这无法通过一些简单的数据库查询来实现,因为我们正在使用的文件存储系统没有查询功能和编码值。

P.S。 :-另外,我们正在使用实体事件框架

1 个答案:

答案 0 :(得分:0)

您需要编写自定义反序列化器,并将telephone映射到mobile

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.JsonAdapter;

import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Type;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder()
                .create();

        try (FileReader jsonReader = new FileReader(jsonFile)) {
            System.out.println(gson.fromJson(jsonReader, User.class));
        }
    }
}

class UserJsonDeserializer implements JsonDeserializer<User> {

    @Override
    public User deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();

        User user = new User();
        user.setUser(jsonObject.get("user").getAsString());
        user.setMobile(jsonObject.get("telephone").getAsString());

        return user;
    }
}

@JsonAdapter(UserJsonDeserializer.class)
class User {

    private String user;
    private String mobile;

    // getters, setters, toString
}

打印:

User{user='user', mobile='123456789'}