POJO与整数数组反序列化

时间:2016-06-23 11:07:25

标签: java android gson

将以下 JSON 反序列化为 POJO 时遇到问题。我无法控制 JSON 结构,否则我会以其他方式实现它,但是,这就是你的生活。

{
    "1":{
       "test":"1",
       "other":"stuff"
   },
   "2":{
      "test":"2",
      "other":"stuff2"
   }
}

无论如何,我试图通过使用POJO来反序列化:

public Map<Integer, Payload> payload;

但是虽然Map的大小为2,但当我尝试获取每个大小时,它的内容都是 null 。对我做错了什么的想法?

谢谢

2 个答案:

答案 0 :(得分:1)

我不知道有效载荷类是怎么样的,但它应该是这样的:

class Payload {
    String test;
    String other;

    @Override
    public String toString() {
    return "Payload [test=" + test + ", other=" + other + "]";
    }
}

如果断言这个条件,那么你可以使用TypeToken&gt;反序列化json。作为 danypata 的标记建议......如:

public static void main(String args[]) throws InterruptedException {
String ff = "{\"1\":{" + "\"test\":\"1\"," + "\"other\":\"stuff\"" + "}," + "\"2\":{" + "\"test\":\"2\","
    + "\"other\":\"stuff2\"" + "}}";
Gson gson = new Gson();
Type mapType = new TypeToken<Map<String, Payload>>() {
}.getType();
Map<String, Payload> map = gson.fromJson(ff, mapType);
System.out.println(map);
for (Entry<String, Payload> entry : map.entrySet()) {
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}
}

给出结果:

  

{1 = Payload [test = 1,other = stuff],2 = Payload [test = 2,other = stuff2]}

     

1   有效负载[test = 1,其他=东西]

     

2   有效负载[test = 2,other = stuff2]

答案 1 :(得分:0)

为什么不使用Android JSONObject class?然后,您可以使用它解析整个JSON字符串,然后您可以轻松获取值。例如,这是为了获得你的&#34; 1&#34; JSON对象:

    final JSONObject jsonObject = new JSONObject(jsonString);
    final String test = jsonObject.getJSONObject("1").getString("test");
    final String other = jsonObject.getJSONObject("1").getString("other");