我有一个json字符串,我的要求是转换为map,其中key是json的字段。下面是我的json
{
"A":[
{
"B":[
{
"C":[
{
"D1":"V1",
"D2":"X1",
"D3":Y1,
"D4":"Z1"
},
{
"D1":"V2",
"D2":"X2",
"D3":Y2,
"D4":"Z2"
}
]
}
]
}
]
}
键应该看起来像“A-> B-> C-> D1”和对应的值V1,V2。
地图签名应该看起来像Map<String,List<String>>
。类似的问题发布here,但我的问题是从json字段创建密钥。让我知道是否需要更多信息。提前谢谢。
答案 0 :(得分:0)
我做了一些回答你的完全结构的东西,我将D3的值更改为字符串:
类Wraper
,它是整个对象
public class Wraper {
public Wraper() {}
@JsonProperty("A") A[] a;
}
班级A
public class A {
@JsonProperty("B") B[] b;
}
班级B
public class B {
@JsonProperty("C") C[] c;
}
班级C
public class C {
@JsonProperty("D1") String d1;
@JsonProperty("D2") String d2;
@JsonProperty("D3") String d3;
@JsonProperty("D4") String d4;
}
最后我测试的地方:
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);
});
});
答案 1 :(得分:0)
使用正确的Java类定义(基于JSON)尝试Jackson。
以下是一些代码:
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;
}
}
}