需要在Java中解析动态json

时间:2016-12-22 10:29:06

标签: java json

以下是json将从合作伙伴应用程序收到,作为我们最终执行操作的输入。

{"path":"/test1" ,"children":[{"path":"/test2"},{"path":"/test3","children":[{"path":"/test4","children":[{"path":"/test5"}]}]}]} 

儿童键的值是JsonArray。根据json中的指定,子键可能嵌套n次。

下面java类用于解析提到的json,并且在许多论坛中建议递归程序将花费更多的时间来执行。请让我知道解析这个json的更好方法。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class TestJsonDynamic {

    public static void parsejson(JSONArray json)
    {
        //System.out.println("Outer Array --- "+json);

        for(int k=0;k<json.length();k++)
        {
            try {
                JSONObject json2=(JSONObject)json.get(k);
                if(json2.has("children"))
                {
                    parsejson((JSONArray)json2.get("children"));
                }
                else
                {
                    System.out.println("File Name "+json2.get("path"));
                }

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args)
    {
        String str="{\"path\":\"/test1\" ,\"children\":[{\"path\":\"/test2\"},{\"path\":\"/test3\",\"children\":[{\"path\":\"/test4\",\"children\":[{\"path\":\"/test5\"}]}]}]}";
        try {
            System.out.println("Complete Json ---------> "+str);
            JSONObject json=new JSONObject(str);
            JSONArray jarr=(JSONArray)json.get("children");
            System.out.println(jarr.length());

            for(int i=0;i<jarr.length();i++)
            {
                JSONObject json1=(JSONObject)jarr.get(i);
                System.out.println("Outer loop "+i);
                if(json1.has("children"))
                {
                    JSONArray jarr1=(JSONArray)json1.get("children");

                    for(int j=0;j<jarr1.length();j++)
                    {
                        JSONObject json2=(JSONObject)jarr1.get(j);
                        if(json2.has("children"))
                        {
                            parsejson((JSONArray)json2.get("children"));
                        }
                        else
                        {
                            System.out.println(json2.get("path"));
                        }
                    }
                }
                else
                {
                    System.out.println(json1.get("path"));
                }
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

0 个答案:

没有答案