Сборка JSON из структуры папок и наоборот - PullRequest
2 голосов
/ 27 мая 2010

Я пытаюсь сгенерировать представление json из структуры папок.

Пример структуры папок / файлов:

folder
|_ meta.xml
|_ subdir1
   |_ textfile1.txt
|_ subdir2
   |_ textfile2.txt 

Вручную сгенерируйте представление json этой структуры:

def builder = new net.sf.json.groovy.JsonGroovyBuilder()
def json = builder.dir {
    file(name: "meta.xml")
    folder(name: "subdir1") {
        file(name: "textfile.txt")
    }
    folder(name: "subdir2") {
        file(name: "textfile3.txt")
    }
}

генерирует:

{
   "dir":{
      "file":{
         "name":"meta.xml"
      },
      "folder":[
         {
            "name":"subdir1"
         },
         {
            "file":[
               {
                  "name":"textfile.txt"
               }
            ]
         },
         [
            {
               "name":"subdir2"
            },
            {
               "file":[
                  {
                     "name":"textfile3.txt"
                  }
               ]
            }
         ]
      ]
   }
}

Отличный способ просмотреть структуру папок:

new File("./dir" ).eachFileRecurse{file ->
    println file
}

генерирует:

.\dir\meta.xml
.\dir\subdir1
.\dir\subdir1\textfile1.txt
.\dir\subdir2
.\dir\subdir2\textfile2.txt

Но как собрать их вместе, чтобы сгенерировать это автоматически?

1 Ответ

0 голосов
/ 25 февраля 2011
def paths = [:]
def listOfPaths = []

def access = {d, path ->
    if (d[path] == null) {
        d[path] = [:]
    } 
    return d[path]        
}

new File('./dir').eachFileRecurse{ file ->
    listOfPaths << file.toString().tokenize('/')
}

listOfPaths.each{ path ->
    def currentPath = paths
    path.each { step ->
        currentPath = access(currentPath, step)
    }
}

Последнее, что осталось сделать, - это преобразовать paths в JSON.

Надеюсь, это поможет!

...