当我不知道密钥的名称时,如何将一些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”的回复时,却没有。如何使我的代码适用于随机名称?
我正在使用杰克逊
对不起,我不能说清楚我的问题。
答案 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();
}