Poniższa funkcja/metoda konwertuje strukturę katalogów do formatu json w głąb drzewa
QJsonArray filesOperations::listDirToJSON(QString dirLoc, QJsonArray tempJSON){//można skasowac tempJOSON !!!
QDir sourceDir(dirLoc);
QFileInfoList fileInfoList = sourceDir.entryInfoList();
foreach(QFileInfo fileInfo, fileInfoList){
if(fileInfo.isFile() && fileInfo.baseName() != ""){
jSonTreeDirOb["type"]="file";
jSonTreeDirOb["suffix"]=fileInfo.completeSuffix();
jSonTreeDirOb["name"]=fileInfo.baseName();
jSonTreeDirOb["path"]=fileInfo.path();
if(fileInfo.completeSuffix()== "png"){//Sprawdza czy to plik graficzny
jSonTreeDirOb["data"]=filesOperations::loadFileToImg(fileInfo.path(),fileInfo.baseName(),fileInfo.completeSuffix());
}else{
jSonTreeDirOb["data"]=filesOperations::base64_encode(filesOperations::loadFileToText(fileInfo.path(),fileInfo.baseName(),fileInfo.completeSuffix()));
}
tempJSON.append(jSonTreeDirOb);
}
if (fileInfo.isDir() && fileInfo.baseName() != ""){
jSonTreeDirOb["type"]="catalog";
jSonTreeDirOb["suffix"]=fileInfo.completeSuffix();
jSonTreeDirOb["name"]=fileInfo.baseName();
jSonTreeDirOb["path"]=fileInfo.path();
tempJSON.append(jSonTreeDirOb);
tempJSON.append(filesOperations::listDirToJSON(dirLoc+"/"+fileInfo.baseName()));
}
}
return tempJSON;
}
otrzymuję coś takiego:
[
{
"data": "I21lbnVBIHtiYWNrZ3JvdW5kLWvbG9yOiN...lMDUyMmZ9",
"name": "css",
"path": "tiles/menuA",
"suffix": "css",
"type": "file"
},
{
"data": "NQ==",
"name": "dataCol",
"path": "tiles/menuA",
"suffix": "txt",
"type": "file"
},
{
"data": "MQ==",
"name": "dataRow",
"path": "tiles/menuA",
"suffix": "txt",
"type": "file"
},
{
"data": "Mg==",
"name": "dataSizeX",
"path": "tiles/menuA",
"suffix": "txt",
"type": "file"
},
{
"data": "Mg==",
"name": "dataSizeY",
"path": "tiles/menuA",
"suffix": "txt",
"type": "file"
},
{
"data": "Mg==",
"name": "files",
"path": "tiles/menuA",
"suffix": "",
"type": "catalog"
},
[
{
"data": "Mg==",
"name": "img_01",
"path": "tiles/menuA/files",
"suffix": "",
"type": "catalog"
},
[
{
"data": "iVBORw0KGgoAAAANSUhEU...==",
"name": "dataBase64",
"path": "tiles/menuA/files/img_01",
"suffix": "png",
"type": "file"
},
{
"data": "cG5n",
"name": "type",
"path": "tiles/menuA/files/img_01",
"suffix": "txt",
"type": "file"
},
{
"data": "ZGF0YTppbWFnZS9wbmc7Ym...FzZTY0L==",
"name": "urlPrefix",
"path": "tiles/menuA/files/img_01",
"suffix": "txt",
"type": "file"
}
]
],
{
"data": "PGI+TUVOVSBBPC9iPiA8aW1nIGlkPSJtZW51QWltZ18...wMIvPg==",
"name": "html",
"path": "tiles/menuA",
"suffix": "htm",
"type": "file"
},
{
"data": "bWVudUE=",
"name": "id",
"path": "tiles/menuA",
"suffix": "txt",
"type": "file"
},
{
"data": "",
"name": "js",
"path": "tiles/menuA",
"suffix": "js",
"type": "file"
}
]
Chciałbym aby w obiekcie katalog była umieszczona tablica obiektów (plików i katalogów (jeżeli istnieją)), a nie jak teraz jest pod sobą.(kod powyżej)
(Poniżej) przykład prawidłowy.
{
"data": "Mg==",
"name": "files",
"path": "tiles/menuA",
"suffix": "",
"type": "catalog",
"children": [
{
"data": "Mg==",
"name": "img_01",
"path": "tiles/menuA/files",
"suffix": "",
"type": "catalog"
}....
]
},
Prawdopodobnie problem leży w tym kodzie:
if (fileInfo.isDir() && fileInfo.baseName() != ""){
jSonTreeDirOb["type"]="catalog";
jSonTreeDirOb["suffix"]=fileInfo.completeSuffix();
jSonTreeDirOb["name"]=fileInfo.baseName();
jSonTreeDirOb["path"]=fileInfo.path();
tempJSON.append(jSonTreeDirOb);
tempJSON.append(filesOperations::listDirToJSON(dirLoc+"/"+fileInfo.baseName()));
}
obiekty w głąb drzewa katalogu powinny sie znajdować w tablicy obiektu który jest katalogiem >>> "children": [ <<<
Jak to zrobić ?