我有一个JSON对象,它实际上是序列化的Java对象。 JSON对象就是这样
{
user: 'user',
telephone: '123456789'
}
java对象的电话字段已从“电话”重命名为“移动”。因此,现在java对象具有以下字段。
我想做的是数据迁移。我想以JSON字符串的形式从数据库中获取数据->并使用GSON将JSON解析为java对象(到目前为止,我们使用gson.fromJson(class,data)方法)保留该值在电话中(因为电话现在不在java类中的字段中)-这样我就可以将该数据传递到新的字段(移动设备中)。
我该怎么做?
P.S。 :-这无法通过一些简单的数据库查询来实现,因为我们正在使用的文件存储系统没有查询功能和编码值。
P.S。 :-另外,我们正在使用实体事件框架
答案 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'}