将json字符串转换为map

时间:2018-04-13 15:05:58

标签: java json hashmap

我有一个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字段创建密钥。让我知道是否需要更多信息。提前谢谢。

2 个答案:

答案 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;
    }
}
}
相关问题