Как получить дополнительные поля в данных JSON в GSON - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть объект JSON, который на самом деле является сериализованным объектом Java. Объект JSON выглядит примерно так

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

Поле phone объекта java было переименовано из 'phone' в 'mobile'. Теперь объект Java имеет следующие поля.

  • Пользователь
  • мобильный

То, что я хочу сделать, - это миграция данных. Я хочу получить данные из базы данных в виде строки JSON -> и проанализировать этот JSON для объекта java с помощью GSON (пока мы используем метод gson.fromJson (class, data)) сохранение значения в телефон (так как телефон не является полем в классе Java сейчас), поэтому я могу передать эти данные в новое поле (мобильное).

Как я могу это сделать?

P.S. : - Этого нельзя достичь с помощью простого запроса к базе данных, потому что мы используем систему хранения файлов, у которой нет средства запроса и закодированных значений.

P.S. : - Кроме того, мы используем каркас событий объекта

1 Ответ

0 голосов
/ 26 апреля 2019

Вам необходимо написать собственный десериализатор и карту 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'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...