简体   繁体   English

使用 java 从 JSON 获取动态子数组

[英]get a dynamic sub array from JSON using java

I am trying to read json using java which contains data of a menu created by Jquery Plugin.我正在尝试使用 java 读取 json,其中包含由 Jquery 插件创建的菜单数据。

    [
  {
    "text": "Home",
    "href": "http://home.com",
    "icon": "fas fa-home",
    "target": "_top",
    "title": "My Home"
  },
  {
    "text": "Option1",
    "href": "",
    "icon": "fas fa-map-marker",
    "target": "_self",
    "title": "",
    "children": [
      {
        "text": "Option1.1",
        "href": "",
        "icon": "fas fa-search",
        "target": "_self",
        "title": "",
        "children": [
          {
            "text": "Option1.1.1",
            "href": "",
            "icon": "fas fa-plug",
            "target": "_self",
            "title": "",
            "children": [
              {
                "text": "Option1.1.1.1",
                "href": "",
                "icon": "fas fa-filter",
                "target": "_self",
                "title": ""
              }
            ]
          }
        ]
      },
      {
        "text": "Option1.2",
        "icon": "fab fa-amazon-pay",
        "href": "",
        "target": "_self",
        "title": "",
        "children": [
          {
            "text": "Option1.2.1",
            "icon": "empty",
            "href": "",
            "target": "_self",
            "title": ""
          }
        ]
      }
    ]
  },
  {
    "text": "Option2",
    "icon": "fab fa-adversal",
    "href": "",
    "target": "_self",
    "title": ""
  }
]

Visual representation of this json will be like此 json 的视觉表示将类似于

在此处输入图像描述

Children array is created dynamically.子数组是动态创建的。 It can be in every object.它可以在每个 object 中。 Is there a way to read the children array which is inside of other children arrays?有没有办法读取其他孩子 arrays 内部的孩子数组?

I'm using json-simple to read the json file and my current code is:我正在使用 json-simple 读取 json 文件,我当前的代码是:

 JSONParser parser = new JSONParser();
        Object obj = parser.parse(new FileReader("C:\\Users\\ryuuk\\Desktop\\data.json"));
        JSONArray jsonArray = (JSONArray) obj;
        for (Iterator it = jsonArray.iterator(); it.hasNext();) {
            JSONObject object = (JSONObject) it.next();
            System.out.println(" <li><a href=\"#\">" + object.get("text") + "</a>");
            if (object.containsKey("children")) {
                System.out.println("<ul>");
                JSONArray achil = (JSONArray) object.get("children");
                for (int i = 0; i < achil.size(); i++) {
                    JSONObject objectx = (JSONObject) achil.get(i);
                    System.out.println(" <li><a href=\"#\">" + objectx.get("text") + "</a>");
                }
                System.out.println("</ul>");
            }
        }

Which will output this:其中将 output 这个:

 <li><a href="#">Home</a>
 <li><a href="#">Option1</a>
<ul>
 <li><a href="#">Option1.1</a>
 <li><a href="#">Option1.2</a>
</ul>
 <li><a href="#">Option2</a>

在此处输入图像描述

How can I read those children arrays in Option1.1.1 ?我如何阅读 Option1.1.1 中的那些孩子arrays

after few hours of trying i was able to comeup with a code that works经过几个小时的尝试,我能够想出一个有效的代码

在此处输入图像描述

output output

    <li>
   <a href="#">Programming</a>
   <ul>
      <li><a href="#">C++</a> </li>
      <li><a href="#">C#</a> </li>
      <li><a href="#">Java</a> </li>
      <li>
         <a href="#">Web Development</a>
         <ul>
            <li><a href="#">PHP</a> </li>
            <li><a href="#">Ruby</a> </li>
            <li><a href="#">Javascript</a> </li>
         </ul>
      </li>
      <li><a href="#">Python</a> </li>
   </ul>
</li>
<li>
   <a href="#">OS</a>
   <ul>
      <li><a href="#">Windows</a> </li>
      <li><a href="#">Macintosh</a> </li>
      <li><a href="#">Linux</a> </li>
   </ul>
</li>
<li>
   <a href="#">Projects</a>
   <ul>
      <li><a href="#">Android</a> </li>
      <li><a href="#">iOS</a> </li>
      <li><a href="#">Web</a> </li>
      <li><a href="#">Windows</a> </li>
   </ul>
</li>
<li><a href="#">About</a> </li>

jsp code jsp代码

    <%
    JSONParser parser = new JSONParser();
    Object obj = parser.parse(new FileReader("C:\\Users\\ryuuk\\Desktop\\data.json"));
    JSONArray jsonArray = (JSONArray) obj;
    out.write(new TagMaker().generateMenu(jsonArray));
%>

class - class -

    public class TagMaker {

    static String menuString = "";

    public String generateMenu(JSONArray obj) {
        JSONArray jsonArray = (JSONArray) obj;
        for (Iterator it = jsonArray.iterator(); it.hasNext();) {
            JSONObject object = (JSONObject) it.next();
            menuString += " <li><a href=\"#\">" + object.get("text") + "</a>";
            if (checkforChildren(object.get("children"))) {
                looparray((JSONArray) object.get("children"));
            }
            menuString += " </li>";
        }
        System.out.println(menuString);
        return menuString;
    }

    public boolean checkforChildren(Object get) {
        return get != null;
    }

    public String looparray(JSONArray jsonArray) {
        menuString += "<ul>";
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject get = (JSONObject) jsonArray.get(i);
            menuString += " <li><a href=\"#\">" + get.get("text") + "</a>";
            if (checkforChildren(get.get("children"))) {
                looparray((JSONArray) get.get("children"));
            }
            menuString += " </li>";
        }
        menuString += "</ul>";
        return menuString;
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM