2014-01-08 30 views
0

我试图从地图获取特定值。如何抓取内部的JSON地图

我需要分配给 “leaguePoints”, “层”, “等级” 值, “queueType”: “RANKED_SOLO_5x5” & & “playerOrTeamName”: “Invicterr”。

我在下面尝试添加代码。

我想我需要迭代条目:[],但我不知道如何去做到这一点。 我一共是JSON新手,和Java begginer。

地图:

"32303008": { 
    "queue": "RANKED_SOLO_5x5", 
    "name": "Sejuani's Berserkers", 
    "entries": [ 
    { 
     "isHotStreak": false, 
     "isFreshBlood": false, 
     "leagueName": "Sejuani's Berserkers", 
     "miniSeries": { 
      "progress": "LWN", 
      "target": 2, 
      "losses": 1, 
      "timeLeftToPlayMillis": 0, 
      "wins": 1 
     }, 
     "isVeteran": false, 
     "tier": "PLATINUM", 
     "lastPlayed": 0, 
     "playerOrTeamId": "21747474", 
     "leaguePoints": 100, 
     "rank": "V", 
     "isInactive": false, 
     "queueType": "RANKED_SOLO_5x5", 
     "playerOrTeamName": "sunchasee", 
     "wins": 127 
    }, 
    { 
     "isHotStreak": false, 
     "isFreshBlood": false, 
     "leagueName": "Sejuani's Berserkers", 
     "isVeteran": false, 
     "tier": "PLATINUM", 
     "lastPlayed": 1389198358615, 
     "playerOrTeamId": "32303008", 
     "leaguePoints": 64, 
     "rank": "V", 
     "isInactive": false, 
     "queueType": "RANKED_SOLO_5x5", 
     "playerOrTeamName": "Invicterr", 
     "wins": 462 
    } 
    ], 
    "tier": "PLATINUM" 
} 

我的代码:

for (Map.Entry<String, League> entry : leagues.entrySet()) 
{ 
try 
{ 
    if(Integer.parseInt(entry.getKey()) == 32303008) 
     { 
      System.out.println(entry.getKey() + "|" + entry.getValue()); 
     } 
} 
catch(Exception e){} 
} 
+0

步骤1)使用其中一个不同的工具包将JSON字符串转换为一组嵌套的地图和数组。步骤2)通过地图条目“32303008”,地图条目“条目”,数组元素0,地图条目“leaguePoints”的“链”访问。等其他值。不需要迭代。 –

回答

0

我会建议使用像JSON Simple。这会将您的JSON转换为更简单的Java对象。

0

伪代码:

Map jsonMain = JSONParser.parse(myJSONSourceString); 
Map numberedEntry = (Map)(jsonMain.get("3203008")); 
List entries = (List)(numberedEntry.get("entries")); 
for (int i = 0; i < entries.size(); i++) { 
    Map theEntry = (Map)(entries.get(0)); 
    String queueType = (String)(theEntry.get("queueType")); 
    String playerOrTeamName = (String)(theEntry.get("playerOrTeamName")); 
    if (queueType.equals("RANKED_SOLO_5x5") && (playerOrTeamName.equals("Invicterr")) { 
     Number leaguePoints = (Number)(theEntry.get("leaguePoints")); 
     int leaguePointsValue = leaguePoints.intValue(); 
     String tier = (String)(theEntry.get("tier")); 
     String rank = (String)(theEntry.get("rank")); 
     // Do something with the values 
     break; 
    } 
} 

的精确类型和方法的名称(以及是否需要浇铸)将取决于JSON试剂盒使用。