Общий метод в Java для различных объектов для разбора файла json - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть метод парсера для разбора файла json. Я создал его для ClassA, но я хочу использовать его для разных классов, таких как ClassB и Class C, а также

Мой код:

public static List<ClassA> parseFromFile(String path){
    JSONParser parser = new JSONParser();
    List<ClassA> list = new ArrayList<>(Collections.emptyList());

    try {
        BufferedReader in = new BufferedReader(new FileReader(path));

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            JSONArray a = (JSONArray) parser.parse(inputLine);

            for (Object o : a) {
                JSONObject jsonObject = (JSONObject) o;

                ClassA a = new Gson().fromJson(String.valueOf(jsonObject), ClassA.class);
                list.add(a);
            }
        }
        in.close();
    } catch (IOException | ParseException e) {
        e.printStackTrace();
    }

    return list;
}

1 Ответ

1 голос
/ 11 апреля 2020

Передайте класс в качестве параметра. Вам нужно изменить эти строки:

public static <T> List<T> parseFromFile(String path, Class<T> type){
    JSONParser parser = new JSONParser();
    List<T> list = new ArrayList<>(Collections.emptyList());

и эту строку:

                T a = new Gson().fromJson(String.valueOf(jsonObject), klass);

Если бы я был вами, вы бы посмотрели, имеет ли смысл эта реализация: похоже, вы разбираете сначала содержимое файла с библиотекой org.json, затем преобразование обратно в JSON и повторный анализ с использованием Gson. Вам нужно проанализировать только один раз:

    BufferedReader in = new BufferedReader(new FileReader(path));
    T a = new Gson().fromJson(in, klass);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...