当有随机密钥名称时,如何使用JAVA解析JSON

时间:2014-12-04 04:52:48

标签: java json

当我不知道密钥的名称时,如何将一些JSON转换为POJO?

这是我的POJO:

public class Summoner {

    private Details summonerDetails;

    public Details getSummonerDetails() {
        return summonerDetails;
    }

    public void setSummonerDetails(Details summonerDetails) {
        this.summonerDetails = summonerDetails;
    }

}

Details类包含id,name等变量 - >这里没问题

这是我的Main类中的一行,我尝试将JSON映射到POJO:

Summoner test = new ObjectMapper().readValue(json, Summoner.class);

这是我收到的JSON响应示例:

{
   "randomName":{
      "id":22600348,
      "name":"Ateuzz",
      "profileIconId":546,
      "summonerLevel":30,
      "revisionDate":1378316614000
   }
}

如果我的POJO详细信息成员变量名称是“randomName”,则上述代码将起作用。但当我得到一个名称不同于“randomName”的回复时,却没有。如何使我的代码适用于随机名称?

我正在使用杰克逊

对不起,我不能说清楚我的问题。

2 个答案:

答案 0 :(得分:2)

我的解决方案不仅使用了jackson API,还使用了org.json API

String str = "{\"randomName\":{\"id\":22600348,\"name\":\"Ateuzz\",\"profileIconId\":546,\"summonerLevel\":30,\"revisionDate\":1378316614000}}";
JSONObject json = new JSONObject(str);
Iterator<?> keys = json.keys();
while(keys.hasNext())
{
    String key = (String)keys.next();
    Details test = new ObjectMapper().readValue(json.getJSONObject(key).toString(), Details.class);

}  

这里我使用另一个JAVA Json API将您的字符串转换为jsonObject,然后迭代它以获取您的第一个键值并将其映射到您的类Details。

我认为您的json格式与您在问题中提到的相同。

愿这对你有所帮助。

答案 1 :(得分:0)

使用杰克逊:

    String json = "{\"randomName\":{\"id\":22600348,\"name\":\"Ateuzz\",\"profileIconId\":546,\"summonerLevel\":30,\"revisionDate\":1378316614000}}";
    try
    {
      @SuppressWarnings("unchecked")
      Map<String, Map<String, Object>> map = (Map) new ObjectMapper().readValue(json, Map.class);
      for(String key : map.keySet())
      {
          Map<String, Object> submap = map.get(key);
          System.out.println(key + ":");
          for(String k : submap.keySet())
          {
              System.out.println("\t" + k + ": " + submap.get(k));
          }
      }
    }
    catch(IOException e)
    {
        e.printStackTrace(); 
    }