如何抓取内部JSON映射

时间:2014-01-08 19:30:30

标签: java json gson

我试图从地图中获取特定值。

我需要将值分配给“leaguePoints”,“tier”,“rank”,for “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){}
}

2 个答案:

答案 0 :(得分:0)

我建议使用类似JSON Simple的内容。这会将您的JSON转换为更易于使用的Java对象。

答案 1 :(得分: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工具包。