получить динамический c подмассив из JSON, используя java - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь прочитать json, используя java, который содержит данные меню, созданного 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": ""
  }
]

Визуальное представление этого json будет похоже на

enter image description here

Children array is created dynamically. It can be in every object. Is there a way to read the children array which is inside of other children arrays ?

I'm using json-simple to read the json file and my current code is :

 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("  "+ object.get (" текст ") +""); if (object.containsKey (" children ")) {System.out.println (" " ); JSONArray achil = (JSONArray) object.get ("дети"); for (int i = 0; i  " + objectx.get ("текст") + "");} System.out.println ("");}} 

Что выведет это:

 <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>

введите описание изображения здесь

Как я могу прочитать эти дочерние массивы в Option1.1.1 ?

1 Ответ

0 голосов
/ 03 августа 2020

после нескольких часов попыток я смог придумать код, который работает

enter image description here

output

    
    Программирование   C ++   C#  Java   Веб-разработка   PHP  Ruby  Javascript    Python     OS  Windows   Macinto sh  Linux     Проекты   Android  iOS   Интернет   Windows     О   

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));
%>

класс -

    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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...