Разумно ли считать json-файл и присвоить в строку, потом строку в Arraylist?
у меня есть задача:
данные о фильмах хранится в JSON файле ( movies.json ). Вам надо написать программу, которая считает её из файла и сможет выполнять с ней следующие действия:
- Выводить коллекцию фильмов на экран;
- Искать и отображать фильмы по полному и частичному совпадению в названии. выпуска фильма по названию по режиссеру
Я решил прочитать json-Файл, потом данные присвоить в Строку, потом Строку в добавить в List, и дальше делать манипуляции описанный в задании.
Вопрос:Это тупое решение? если да, то как правильно решить данную задачу? мой код :
public class Movies implements Actionable{
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Scanner sc;
private String str;
private List<String> list = new ArrayList<>();
public void readJson(){
try {
FileReader fileReader = new FileReader("movies.json");
sc = new Scanner(fileReader);
while (sc.hasNextLine()){
str += sc.nextLine(); // записать данные из файла в строку str
}
fileReader.close();
sc.close();
list.add(str); // далее добавить строку в list
}catch (IOException exception){
exception.printStackTrace();
}
}
Ответы (1 шт):
Напишите такой парсер (я закомментировал интерфейс, потому как в моем примере он не нужен, но вы можете го добавить):
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class MoviesParser<T> {// implements Actionable {
private final Type type;
private final Gson gson;
public MoviesParser(Class<T> clazz) {
this.gson = new Gson();
this.type = new TypeToken<ArrayList<T>>() {}.getType();
}
public List<T> readJson(String fileName) {
try (Reader reader = new BufferedReader(new FileReader(fileName))) {
return gson.fromJson(reader, type);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Предположим, что ваш класс-модель для фильмов называется Movies, тогда чтобы спарсить джейсон нужно сделать так:
public static void main(String[] args) {
MoviesParser<Movies> parser = new MoviesParser(Movies.class);
List<Movies> moviesList = parser.readJson("movies.json");
}
После этого вы получите лист с распарсенными даными, делайте с ними что вам нужно