2016-07-14 7 views
0

brauche ich folgende Antwort in POJOConvert Json Containing Karte von ähnlicher Liste in POJO

{ 
"abc" : [ 
{ 
    "a" : "", 
    "b": "", 
    "c" : "" 
}, 
{ 
"a" : "", 
    "b": "", 
    "c" : "" 
} 
], 
"xyz" : [ 
{ 
    "a" : "", 
    "b": "", 
    "c" : "" 
}, 
{ 
"a" : "", 
    "b": "", 
    "c" : "" 
}] 
} 

Für innen Objekt zu konvertieren Ich habe eine Klasse nennt es läßt ‚A‘.

public class A{ 
private string a; 
private string b; 
private string c; 
constructor.. 
getter.. 
setter.. 
} 

Meine json enthält viele Objekte wie „acb“ und „xyz“, dh Liste der gleichen Objekttyp ‚A‘ und Schlüssel für die gleiche ist nicht für zB bekannt

{ "abc" [---], 
"def" [---], 
"ghi" [---], 
"jkl" [---], 
....... 
"xyz" [---] 
} 

ich versucht habe, verwenden folgende Klasse für das gleiche

Public class Example{ 
Map<String,List<A>> response; 

public Example(Map<String,List<A>> response){ 
this.response = response; 
} 

getter... 
setter... 
} 

es scheint nicht zu funktionieren, verwende ich Object Mapper-Klasse zu konvertieren.

Example example = objectmapper.readValue(responseBody,Example.class); 
+0

Was meinst du mit nicht funktioniert? Können Sie es detaillierter beschreiben und den Fehler-Stack-Trace bereitstellen? – Wilson

+0

Ich bin nicht in der Lage, eine geeignete Klasse zu erstellen, um meine Json in Objekt –

Antwort

1

Eine einfache Map<List<Item>> funktionieren würde:

class Item{ 
    private String a=""; 
    private String b=""; 
    private String c=""; 
    public String getA() { 
     return a; 
    } 
    public void setA(String a) { 
     this.a = a; 
    } 
    public String getB() { 
     return b; 
    } 
    public void setB(String b) { 
     this.b = b; 
    } 
    public String getC() { 
     return c; 
    } 
    public void setC(String c) { 
     this.c = c; 
    } 
} 

die json zu erstellen:

List<Item> list = new ArrayList<Item>(); 
list.add(new Item()); 
list.add(new Item()); 

List<Item> list2 = new ArrayList<Item>(); 
list2.add(new Item()); 
list2.add(new Item()); 

Map<String,List<Item>> map = new HashMap<String,List<Item>>(); 
map.put("abc", list); 
map.put("xyz", list); 

ObjectMapper objectMapper = new ObjectMapper(); 
String writeValueAsString = objectMapper.writeValueAsString(map); 

Die Rückseite der json in eine Karte zu laden:

String json = "{\"abc\":[{\"a\":\"val\",\"b\":\"val\",\"c\":\"val\"},{\"a\":\"val\",\"b\":\"val\",\"c\":\"val\"}],\"xyz\":[{\"a\":\"val\",\"b\":\"val\",\"c\":\"val\"},{\"a\":\"val\",\"b\":\"val\",\"c\":\"val\"}]}"; 
Map<String,List<Item>> map = objectMapper.readValue(json, Map.class); 

So Am Ende ist es ver Ähnlich wie du es getan hast. Es ist einfach das Extra-Level von "Example", das dir Probleme verursacht hat ...

+0

zu konvertieren Sorry, ich habe es verpasst, Kommas zu setzen, ich habe es jetzt korrigiert.Ich habe bereits versucht, was Sie vorgeschlagen haben, aber die Sache ist abc xyz, enthält Liste ähnlich Objekt 'A'. und ich möchte kein Listenobjekt für jeden Schlüssel erstellen. –

+0

aktualisierte die Antwort. Keine Notwendigkeit, für abc und xyz zu duplizieren. Die gleiche Liste kann den Job erledigen, solange der Variablenname mit dem json übereinstimmt. Siehe aktualisierte Antwort. – alexbt

+0

Ich habe ein Beispiel genommen, wo My Json nur zwei Listen enthält, aber es könnte mehr als 10 solcher Objekte enthalten. –