Parsing json

Fermé
Kilkenny95 Messages postés 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020 - Modifié le 11 mars 2020 à 17:45
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 11 mars 2020 à 20:43
Bonjour tout le monde,

J'ai réussi à parser mon JSON, cependant j'aimerai "regrouper" mes info, je ml'explique :

J'obtiens avec mon code :

- Fruits
  - Agrume
      -orange
- Fruits
   -Agrume
      -pamplemousse
- Fruits
  - fruit à noyau 
      -abricot
- Fruits
  - fruit à noyau 
      -mangue
- Fruits
   -Légumineuse 
      -lentilles
- Légumes
  - Légumineuse 
      -haricot
- Légumes
   -crudité 
      -concombre 
- Légumes
   -crudité 
      -courge


Mais j'aimerai transformer en ca :

-Fruit
   -Agrume
      -orange
      -pamplemousse
   -fruit à noyau
      -abricot
      -mangue 
-Légume 
-etc


Merci !

Mon code :

public class Parsing {
 
 public ArrayList<String> listName = new ArrayList<String>();
 public ArrayList<String> todoList = new ArrayList<String>();
 public ArrayList<String> contentList = new ArrayList<String>();
 
 
 public Parsing(StringBuffer responseContent) throws JSONException{
 
  
  String reponseBrute = new String(responseContent.toString());
  JSONObject obj = new JSONObject(reponseBrute);
  

  JSONArray arrayListName = obj.getJSONArray("todo-items");
  JSONArray arrayTodoList = obj.getJSONArray("todo-items");
  JSONArray arrayContent = obj.getJSONArray("todo-items");


  
  for(int i = 0 ; i < arrayListName.length() ; i++){
      listName.add(arrayListName.getJSONObject(i).getString("project-name"));
  }
  
  for(int i = 0 ; i < arrayTodoList.length() ; i++){
      todoList.add(arrayTodoList.getJSONObject(i).getString("todo-list-name"));
  }
  for(int i = 0 ; i < arrayContent.length() ; i++){
   contentList.add(arrayContent.getJSONObject(i).getString("content"));
  }
 

  
  
  System.out.println("PROJECT NAME = "+ listName);
  System.out.println("LISTE NAME = "+ todoList);
  System.out.println("CONTENT NAME = "+ contentList);
  
  
 }
}


ici Fruit = project-name
Agrume = todo-list
Pamplemousse = content

et sur mon .jsp


      
            try{
        HttpConnexion h = new HttpConnexion();
        Parsing p =new Parsing(h.responseContent);
        
        for(int i=0; i<p.listName.size(); i++){
         if(p.listName.get(i)  !=null){
         out.println("project : " + i + " = " + p.listName.get(i));
           %>
              <br/>
               <%
         out.println("list : " + i + " = " + p.todoList.get(i));
            %>
            <br/>
             <%
             out.println("content : " + i + " = " + p.contentList.get(i));
             %>
             <br/>
              <%
             out.println(" ");
             %>
             <br/>
              <%
              
      
         
         }
        }
            }catch(JSONException e){
             
            }

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié le 11 mars 2020 à 20:43
Bonjour,

Java est un langage de programmation objet.
Il faut que tu structures tes données avec des objets.

Exemple :

public class Project {
    String name;
    List<Task> tasks;
}

public class Task {
    String name;
    List<Content> contents;
}

public class Content {
    String description;
}

Remarque : le code suivant dépendra évidemment de la structure du Json à lire (mais comme tu ne nous l'a pas donné, impossible de deviner !)
public static Project parseProject(JSONObject json) {
    Project project = new Project();

    project.setName(json.getString("name"));

    JSONArray array = obj.getJSONArray("tasks");
    List<Task> tasks = new ArrayList<>(array.length());
    for (int i=0; i<array.length(); i++) {
        tasks.add(parseTask(array.getJSONObject(i));
    }
    project.setTasks(tasks);

    return project;
}

public static Task parseTask(JSONObject json) {
    Task task = new Task();

    task.setName(json.getString("name"));

    JSONArray array = obj.getJSONArray("contents");
    List<Content> contents = new ArrayList<>(array.length());
    for (int i=0; i<array.length(); i++) {
        contents.add(parseContent(array.getJSONObject(i));
    }
    project.setContents(contents);

    return task;
}

public static Content parseContent(JSONObject json) {
    Content content = new Content();
    content.setDescription(json.getString("description"));
    return content;
}

Remarque : du code dans une Jsp comme tu l'as fait c'est contraire à l'architecture multi-tiers de Java EE et plus généralement à tous les pattern MVC.
Il faut que tu sépares la partie logique de ton programme (HttpConnexion, Parsing, etc.) de l'affichage (Jsp), chaque classe a son rôle, il ne faut pas tout mélanger.
0