Parser un json à plusieurs noeuds
Résolu
polak1982
Messages postés
13
Statut
Membre
-
polak1982 Messages postés 13 Statut Membre -
polak1982 Messages postés 13 Statut Membre -
Bonjour,
Je demande de l'aide de la commuanute, en effet je souhaite implementer un algo Java pour parser le json suivant :
Afin d'obtenir le resultat suivant :
Merci par avance,
Je demande de l'aide de la commuanute, en effet je souhaite implementer un algo Java pour parser le json suivant :
{
"title":" La Famille",
"id_tavle":"201939OTTO_2_PA",
"root":[
{
"title":" Nouvelles",
"children":[
{
"title":" Tres rapide",
"children":[
{
"title":" Chantier de construction",
"children":[
{
"title":" Faut-il construire des hotels paticuliers ?",
"id_tavle":"201939OTTO_2_PA"
}
]
}
]
}
]
},
{
"title":" Intox",
"children":[
{
"title":" Tres faux",
"children":[
{
"title":" Chantier de demolition",
"children":[
{
"title":" Faut-il detruire des hotels paticuliers ?",
"children":[
{
"title":" Faut-il detruire des hotels paticuliers ?",
"id_tavle":"201939OTTO_2_PA"
}
]
}
]
}
]
}
]
}
]
}
Afin d'obtenir le resultat suivant :
La Famille
Nouvelles
Tres rapide
Chantier de construction
<a>Faut-il construire des hotels paticuliers ?</a>
<a>Faut-il construire des hotels paticuliers ?</a>
Intox
Tres faux
Chantier de demolition
Faut-il detruire des hotels paticuliers ?
<a>Faut-il construire des hotels paticuliers ?</a>
Merci par avance,
A voir également:
- Parser un json à plusieurs noeuds
- Ouvrir fichier json android ✓ - Forum Téléphones & tablettes Android
- Msxml 4.0 sp3 parser - Forum Virus
- J' ai supprimer msxml 4.0 sp2 ✓ - Forum Windows
- Importer marque page firefox json ✓ - Forum Mozilla Firefox
- Convertir bookmarks*.json en bookmarks.html ✓ - Forum Windows
1 réponse
Bonjour
Tu peux regarder cet outil : https://www.jsonschema2pojo.org
Il va générer du code Java qui correspond à ton JSON, par exemple avec les annotations Jackson.
Voir ensuite ici pour manipuler Jackson :
https://www.baeldung.com/jackson-object-mapper-tutorial
Tu peux regarder cet outil : https://www.jsonschema2pojo.org
Il va générer du code Java qui correspond à ton JSON, par exemple avec les annotations Jackson.
Voir ensuite ici pour manipuler Jackson :
https://www.baeldung.com/jackson-object-mapper-tutorial
EN fait mon Json n'est mas statique. Je les récupère de la base de données et n'ont pas les mêmes tailles . J'ai voulu faire ceci :
public void getJsonToHtml(String json) throws JSONException { StringBuilder ret = new StringBuilder(); JSONObject tocRevue = new org.json.JSONObject(json); if(hasKey(tocRevue, "title")){ ret.append(tocRevue.get("title")).append("\n").append("\t"); } JSONArray nodes = tocRevue.getJSONArray("root"); for (int i = 0; i < nodes.length(); i++) { JSONObject child = nodes.getJSONObject(i); if(hasKey(child, "children")){ ret.append(child.get("title")).append("\n").append("\t"); } JSONArray node = (JSONArray) child.get("children"); log.info("node " + node); } log.info("retour " + ret); } private boolean hasKey(JSONObject jsonObject, String key) { return jsonObject != null && jsonObject.has(key); }Mais le résultat qui m'est renvoyé n'est pas le bon:
Or je souhaite obtenir :
Un JSON est forcément prévisible ou alors on ne pourra pas en extraire ses informations, ce qui serait dommage vu que la raison d'être du JSON est de transporter de l'information et donc de pouvoir être lu comme il a été écrit.
Dans ton cas, il s'agit juste de jouer un peu avec la récursivité de la donnée :
import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class Data { public String title; public List<Data> root; public List<Data> children; }import java.io.File; import java.util.List; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); Data data = objectMapper.readValue(new File("D:/datas.json"), Data.class); display(data, ""); } public static void display(Data data, String prefix) { if (data == null) return; System.out.println(prefix + data.title); display(data.root, prefix + " "); display(data.children, prefix + " "); } public static void display(List<Data> datas, String prefix) { if (datas == null) return; for (Data data : datas) display(data, prefix); } }J'arrive à afficher les résultats dans la console comme convenu. J'ai juste une dernière question :
Comment stocker mes résultats dans un StringBuilder ?
Merci par avance,