Как по-другому считывать данные из csv-файла для дальнейшей сериализации в json?

Имеется программа, которая построчно считывает строки из csv-файла, распарсивает их по разделителю, а получившееся сохраняет в коллекцию типа List. Это хорошо работает для одномерного содержимого ячеек csv-файла. Как сделать, чтобы без проблем считывались даже массивы из ячеек? Вот код:

package study;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class Plug {

    public static void main(String[] args) throws IOException {
        System.out.print("Введите Id интересующего клиента: ");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String selectID = reader.readLine();

        String filePath = "D:\\Temp\\users.csv";
        List<User> users = ParseUserCsv(filePath);

        String sql;
        for (int i = 0; i < users.size(); i++) {
            if (users.get(i).id.equals(selectID)) {
                Gson gson = new Gson();
                System.out.println(gson.toJson(users.get(i)));
                sql = "INSERT INTO [testBase].[dbo].[uData] (id,firstName,lastName,patronymic,cardNumber) VALUES (" + users.get(i).id + ",'" + users.get(i).firstName + "','" + users.get(i).lastName + "','" + users.get(i).patronymic + "','" + users.get(i).cardNumber + "')";
                System.out.println(sql);
            }
        }
    }

    private static List<User> ParseUserCsv(String filePath) throws IOException {
        List<User> users = new ArrayList<>();
        List<String> fileLines = Files.readAllLines(Paths.get(filePath));
        for (String fileLine : fileLines) {
            String[] tempText = fileLine.split(";");
            ArrayList<String> columnList = new ArrayList<>();
            for (int i = 0; i < tempText.length; i++) {
                if (IsColumnPart(tempText[i])) {
                    String lastText = columnList.get(columnList.size() - 1);
                    columnList.set(columnList.size() - 1, lastText + ","+ tempText[i]);
                } else {
                    columnList.add(tempText[i]);
                }
            }
            //System.out.println(columnList.get(0) + " " + columnList.get(1) + " " + columnList.get(2) + " " + columnList.get(3) + " " + columnList.get(4));
            User user = new User();
            user.id = columnList.get(0);
            user.firstName = columnList.get(1);
            user.lastName = columnList.get(2);
            user.patronymic = columnList.get(3);
            user.cardNumber = columnList.get(4);
            users.add(user);
        }
        return users;
    }

    private static boolean IsColumnPart(String text) {
        String trimText = text.trim();
        return trimText.indexOf("\"") == trimText.lastIndexOf("\"") && trimText.endsWith("\"");
    }

}

Ответы (0 шт):