Как рекурсивно собрать JSON из строки

Я пытаюсь сопоставить JSON из строки
Есть моя строка

files/a/b.txt

и я хочу отобразить JSON, как это

{
"name" => "files",
"path" => "files",
"type" => "folder",
"items" => [{
"name" => "a",
"path" => "files/a",
"type" => "folder",
"items" => [{
"name" => "b.txt",
"path" => "files/a/b.txt",
"type" => "file",
}]
}]
}

Здесь я показал одну подпапку, но это могут быть бесконечные подпапки.
Любая помощь будет оценена. Спасибо.

ОБНОВИТЬ:
Вот что у меня сейчас

$str = "files/a/b.txt";
$path = explode("/",$str);
$num = count($path);
$num = --$num;
$files = array();
if($num > 2) {
foreach ($path as $keys => $value) {
if($keys > 1 && $keys < $num) {
$files[] = array(
"name" => $value,
"type" => "folder",
"path" => $path[0]."/".$path[1]."/".$value,
"items" =>
);
}
}
}else{
$files[] = array(
"name" => $path[2],
"type" => "file",
"path" => $path[0]."/".$path[1]."/".$path[],
"size" => filesize($path[0]."/".$path[1]."/".$path[])
);
}
echo json_encode($files);

Но я не знаю, как записать часть элементов. Этот код работает только для одной подпапки и по-прежнему не может включать файл в элементы папки.

Примечание. Учтите, что путь не обязательно существует.

0

Решение

Я не знаю, как это сделать в php, но в javascript это будет так:

function myFunction(myString)
{
var object={};
var path="";
var array=myString.split("/");
var items=[];
if(array.length==1)
{
object={
"name":array[0],
"path":array[0],
"type":"file"}
} else{
var path= array[0];
var object={
"name":array[0],
"path":path,
"type":"folder"}
array.splice(0,1);
object.items=[recursiveCall(array,path)]
}
}

function recursiveCall(array,path){
if(array.length==1){
return {
"name":array[0],
"path":path+"/"+array[0],
"type":"file"}

}else{
path=path+"/"+array[0];
var obj={
"name":array[0],
"path":path,
"type":"folder"}
array.splice(0,1);//remove first element
obj.items=[recursiveCall(array,path)]
return obj;
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]