У меня есть файловая структура в базе данных, с путем и именем файла в виде столбцов, и я хочу сгруппировать их вместе, но не знаю, как это сделать.Вот урезанная версия того, что я сейчас использую:
//in this example, list is the returned data
JSONArray jList1 = new JSONArray();
for (int a = 0; a < list.size(); a++){
Object[] fileObj = (Object[])list.get(a);
String folder = (String)fileObj[0];
String filename = (String)fileObj[1];
JSONObject jObj1 = new JSONObject();
jObj1.put("path",folder);
jObj1.put("filename",filename);
jList1.add(jObj1);
}
response.getWriter().write(jList1.toJSONString());
Это помещает все в один и тот же JSONArray.Вот пример вывода:
[
{
path: "/a",
filename: ""
},
{
path: "/a",
filename: "file1.png"
},
{
path: "/a/b",
filename: ""
},
{
path: "/a/b",
filename: "file2.png"
},
{
path: "/a/b",
filename: "file3.png"
},
{
path: "/a/c",
filename: ""
},
{
path: "/a/c",
filename: "file4.jpg",
},
{
path: "/",
filename: "file5.jpg",
},
{
path: "/",
filename: "file6.jpg",
}
]
Мне бы хотелось, чтобы это было похоже на:
[
{
path: "/a",
filename: ""
files: [
{
path: "/a/b",
filename: ""
files: [
{
path: "/a/b",
filename: "file2.png"
},
{
path: "/a/b",
filename: "file3.png"
}
]
},
{
path: "/a/c",
filename: ""
files: [
{
path: "/a/c",
filename: "file4.jpg",
}
]
},
{
path: "/a",
filename: "file1.png"
}
]
},
{
path: "/",
filename: "file5.jpg",
},
{
path: "/",
filename: "file6.jpg",
}
]
Теперь я мог бы сделать это, зная точное количество уровней, но не уверенкак сделать с неизвестным количеством уровней дерева.В каждом объекте есть другие свойства, которые я вынул для примера, поэтому я не просто помещаю само имя файла в массив.
Я пропустил структуру базы данных, так как не думаю, что это действительнонеобходимо.Единственное, что может быть в порядке его размещения, у меня есть следующее:
order by (CASE WHEN path='/' THEN 1 ELSE 0 END), path, filename
В основном папки наверху и файлы внизу на каждом уровне.
Может кто-нибудь поставить меня на правильный путь?структурировать JSON так, как я ищу?Я знаю, что это должно быть чем-то вроде хранения записей по сравнению с предыдущими, но просто не могу понять, как его структурировать.Я думал о том, чтобы иметь разные запросы для каждого каталога, но это вызовет много обращений к базе данных, что приведет к проблемам с производительностью.