I have a json string and my requirement is to covert into map, where key will be field of the json. below is my json
{
"A":[
{
"B":[
{
"C":[
{
"D1":"V1",
"D2":"X1",
"D3":Y1,
"D4":"Z1"
},
{
"D1":"V2",
"D2":"X2",
"D3":Y2,
"D4":"Z2"
}
]
}
]
}
]
}
Key should look like "A->B->C->D1" and corresponding value V1,V2. Map signature should look like Map<String,List<String>>
. Similar kind of question posted here but my problem is to create key out of json field.Let me know if more information is required. Thanks in advance.
I did something that answers the exact structure of yours where i changed the value of D3 to be also string:
class Wraper
that is the whole object
public class Wraper {
public Wraper() {}
@JsonProperty("A") A[] a;
}
class A
public class A {
@JsonProperty("B") B[] b;
}
Class B
public class B {
@JsonProperty("C") C[] c;
}
Class C
public class C {
@JsonProperty("D1") String d1;
@JsonProperty("D2") String d2;
@JsonProperty("D3") String d3;
@JsonProperty("D4") String d4;
}
And finally where I tested:
static final String JSON_VAL="{\"A\":[{\"B\":[{\"C\":[{\"D1\":\"V1\",\"D2\":\"X1\",\"D3\":\"Y1\",\"D4\":\"Z1\"},{\"D1\":\"V2\",\"D2\":\"X2\",\"D3\":\"Y2\",\"D4\":\"Z2\"}]}]}]}";
final ObjectMapper mapper = new ObjectMapper();
final Wraper wraper = mapper.readValue(JSON_VAL, Wraper.class);
final Map<String,List<String>> map = new HashMap<>();
Arrays.stream(wraper.a).forEach(a -> {
Arrays.stream(a.b).forEach(b -> {
final List<String> d1 = new ArrayList<>();
final List<String> d2 = new ArrayList<>();
final List<String> d3 = new ArrayList<>();
final List<String> d4 = new ArrayList<>();
Arrays.stream(b.c).forEach(c -> {
d1.add(c.d1);
d2.add(c.d2);
d3.add(c.d3);
d4.add(c.d4);
});
map.put("A->B->C->D1", d1);
map.put("A->B->C->D2", d2);
map.put("A->B->C->D3", d3);
map.put("A->B->C->D4", d4);
});
});
Try Jackson using the correct Java class definitions (based on the JSON).
Here is some code:
public class topElement
{
private ElementA[] A;
public ElementA[] getA()
{
return A;
}
public void setA(
final ElementA[] newValue)
{
A = newValue;
}
}
public class ElementA
{
private ElementB[] B;
public ElementB[] getB()
{
return B;
}
public void setB(
final ElementB[] newValue)
{
B = newValue;
}
}
public class ElementB
{
private ElementC[] C;
public ElementC[] getC()
{
return C;
}
public void setC(
final ElementC[] newValue)
{
C = newValue;
}
}
public class ElementC
{
private Map blammyMap;
public Map getBlammyMap()
{
return blammyMap;
}
public void setBlammyMap(
final Map newValue)
{
blammyMap = newValue;
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.