以所需格式创建JSON - Java

时间:2014-08-06 09:12:35

标签: java jquery json

我在这方面不是很有经验所以需要帮助。我需要做以下事情:
1.想要遍历内容管理存储库中的文件夹结构 2.想以子节点形式创建文件夹的JSON对象 3. Json数据将用于使用jQuery创建树

Json格式:

var data = [
        {
          text: "Parent 1",
          nodes: [
            {
              text: "Child 1",
              nodes: [
                {
                  text: "Grandchild 1"
                },
                {
                  text: "Grandchild 2"
                }
              ]
            },
            {
              text: "Child 2"
            }
          ]
        },
        {
          text: "Parent 2"
        },
        {
          text: "Parent 3"
        },
        {
          text: "Parent 4"
        },
        {
          text: "Parent 5"
        }
      ];

我的Java方法是这样的:

public static void displayIt(File node){

    System.out.println(node.getAbsoluteFile());

    if(node.isDirectory()){
        String[] subNote = node.list();
        for(String filename : subNote){
            displayIt(new File(node, filename));
        }
    }

}

我正在努力构建策略来创建JSON对象,使用Array来描述​​这个。

请你能帮助我。

2 个答案:

答案 0 :(得分:1)

如果要使用递归从内容管理存储库读取所有文件或文件夹,请使用以下函数:

public static MyFolder readFiles(File file,List<MyFolder> myfolder,MyFolder childObj)
    {
        try
        {
            List<MyFolder> childArray = new ArrayList<MyFolder>();
            if(file.isDirectory())
            {
                File[] file_array = file.listFiles();
                if(file_array.length == 0 ){
                    childObj.text = file.getAbsolutePath();
                    myfolder.add(childObj);
                    childObj = new MyFolder();
                }else{
                    childObj.text = file.getAbsolutePath();
                    childArray = childObj.nodes;
                    if(childArray == null)
                        childArray = new ArrayList<MyFolder>();
                }
                for(File tempFile : file_array)
                {
                    if(tempFile.isDirectory())
                    {
                        childObj = readFiles(tempFile,myfolder,childObj);
                        if(childObj.text != null)
                            myfolder.add(childObj);
                        childObj = new MyFolder();
                    }
                    else
                    {
                        MyFolder obj = new MyFolder();
                        obj.text = tempFile.getAbsolutePath();
                        childArray.add(obj);
                    }
                }
                childObj.nodes = childArray;
            }
            else
            {
                childObj.text = file.getAbsolutePath();
                myfolder.add(childObj);
                childObj = new MyFolder();
            }
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return childObj;
    }

MyFolder课程:

class MyFolder 
{
    String text;
    List<MyFolder> nodes;
}  

您需要一些JSON实用程序或API将您的类转换为json字符串。我使用GSON google APIList<MyFolder>转换为JSON字符串。

以下是我要测试的测试类:

List<MyFolder> myFolder = new ArrayList<MyFolder>();
File file = new File("D:/test");
MyFolder childArray = new MyFolder();
readFiles(file,myFolder,childArray);

Gson json = new Gson();
System.out.println(json.toJson(myFolder));  

输出是:

[
    {
        "text": "D:\\test\\test1\\test12",
        "nodes": [
            {
                "text": "D:\\test\\test1\\test12\\test12.txt"
            },
            {
                "text": "D:\\test\\test1\\test12\\test12_2.txt"
            }
        ]
    },
    {
        "text": "D:\\test\\test2"
    },
    {
        "text": "D:\\test\\test3"
    }
]

剩下的最后一件事就是将其传递给客户端并处理JSON以生成树结构。 愿这对你有所帮助。

答案 1 :(得分:0)

JAVA中有一种方法可以从不同的集合类型生成JSON对象--Flexjson。 Here您可以找到有关Flexjson的最重要信息。简而言之,命令如下所示:

String jsonString = new flexjson.JSONSerializer().deepSerialize(myCollection);  

Jquery完全理解生成的JSON对象,您可以像这样轻松访问JQuery中的内容:

jsonString["column1"]

因此,您只需将数据保存在适合您情况的Arra / Map / whatewer中,然后转换为JSON。

希望它有所帮助,每次我需要一个JSON字符串时,我都会使用这种方法,并且对我来说非常适合。