2013-10-15 3 views
0

Comment créer ce contenu json de manière récursive en utilisant un objet java et Jackson? :Comment créer un objet java à partir de json

{ 
    "children": [ 
     { 
      "children": [ 
       { 
        "name": "cluster", 
        "children": [ 
         { 
          "name": "AgglomerativeCluster", 
          "size": 3938 
         }, 
         { 
          "name": "TestCLuster", 
          "size": 3938 
         } 
        ] 
       } 
      ], 
      "name": "analytics" 
     } 
    ], 
    "name": "flare" 
} 

Voici ma structure d'objet jusqu'à présent, un parent du nom DendogramVO et une classe enfant nommé enfants qui a aussi une liste d'enfants:

import java.util.List; 

public class DendogramVO { 
    private List<Children> children; 
    private String name; 

    public List<Children> getChildren() { 
     return this.children; 
    } 

    public void setChildren(List<Children> children) { 
     this.children = children; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

import java.util.List; 

public class Children { 

    private List<Children> children; 
    private String name; 

    public List<Children> getChildren() { 
     return children; 
    } 

    public void setChildren(List<Children> children) { 
     this.children = children; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

Répondre

2

Notez que votre JSON contient des propriétés inconnues. Vous devez configurer le ObjectMapper pas à l'échec quand il les rencontre (ou les ajouter à votre classe)

String s="{ \"children\": [ { \"children\": [ { \"name\": \"cluster\", \"children\": [ { \"name\": \"AgglomerativeCluster\", \"size\": 3938 }, { \"name\": \"TestCLuster\", \"size\": 3938 } ] } ], \"name\": \"analytics\" } ], \"name\": \"flare\"}"; 
ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
Children children = mapper.readValue(s, Children.class); 

System.out.println(children.getChildren()); 

avec Children#toString() simples impressions

[[children = [[children = [[children = null, name = AgglomerativeCluster], [children = null, name = TestCLuster]], name = cluster]], name = analytics]] 
+0

Enfants # toString() ne correspond pas à la JSON structure d'arbre que j'ai posté en question? –

+1

@ user470184 Oui, c'est le cas. L'objet json le plus imbriqué contient un tableau json contenant deux objets json. Il a le nom 'cluster'. L'objet qui le contient a un nom 'analytics'. Et cet objet est "enfants". Si vous faites 'children.getName()' dans le code ci-dessus, il affichera 'flare', qui est le nom de l'objet json racine. –

+0

avez-vous essayé votre code, mapper.configure (DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); provoque une erreur de compilation: "La méthode configure (SerializationConfig.Feature, boolean) dans le type ObjectMapper n'est pas applicable pour les arguments (DeserializationFeature, boolean)" –