Рекурсивное преобразование массива строк в json

#java #json #tree #nodes

#java #json #дерево #узлы

Вопрос:

Пытаюсь перевести этот список строк в формат json. Список строк выглядит как структура каталогов.

Хотелось бы, чтобы конечный результат был похож на

 [{"name":"Cars","show":false,"nodes":[{"name":"Truck","show":false,"nodes":[{"name":"Regular","show":false,"nodes":[]},{"name":"4x4","show":false,"nodes":[{"name":"Lifted","show":false,"nodes":[]}]}]},{"name":"Jeep","show":false,"nodes":[{"name":"4x4","show":false,"nodes":[]}]},{"name":"Convertable","show":false,"nodes":[]}]}]
  

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

     String[] li = new String[4];
    li[0] = "Cars/Truck/Regular";
    li[1] = "Cars/Truck/4x4/Lifted";
    li[2] = "Cars/Jeep/4x4";
    li[3] = "Cars/Convertable";
    doAll(li);

    public void doAll(String[] files) {
    try {
        for (String file : files) {
            String[] f = file.split("/");
            if (f.length>1) {
                logger.info("directory:" file);
                f = (String[]) ArrayUtils.removeElement(f, f[0]);
                String temp = "";
                for(String ff : f) temp=temp "/" ff;
                temp = temp.replaceFirst("/", "");
                doAll(new String[]{temp});
            } else if(f.length==1){
                logger.info("file:" file);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  

Комментарии:

1. Попробуйте использовать Jackson. Сопоставитель объектов в Jackson может помочь в том, чего вы пытаетесь достичь.

Ответ №1:

Почему бы вам не создать объект и не сгенерировать json из этого объекта? Вы можете создать класс для каждого типа объекта, который у вас есть в вашем json. Например, у вас может быть класс с именем node:

 public class node() {

  private String name;
  private boolean show;
  private node[] nodes;

  //getters and setters

}
  

Затем вы можете установить свой объект со всеми данными вашего транспортного средства и использовать gson для генерации вашего json.

 Gson gson = new Gson();
String json = gson.toJson(node);
  

Комментарии:

1. да, я понимаю эту часть. но где в пределах всего я мог бы поместить объект?

2. Если я правильно понимаю, я не думаю, что вам понадобится метод doAll(), если вы используете gson. Вы можете создать новый объект узла, например) Узел узел = новый узел (), а затем установить значения, например) узел.setName(«Автомобили») узел.setShow(false) и т.д…. затем используйте gson для генерации вашей строки json