日期:2014-05-18  浏览次数:20700 次

获取界面返回的json问题【求助】
https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/V001/?key=D0CCA1C6B04C07BBA05F04BE6D3E8E23&match_id=173546139
这串json,为什么我用JSONObject读出来,只能取到result而且返回的是字符串,如何才能取到下面对应的一些值呢?
 
try{
         myurl = new URL("https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/V001/?key=D0CCA1C6B04C07BBA05F04BE6D3E8E23&match_id="+matchId);
            conn = myurl.openConnection();
            httpURLConn = (HttpURLConnection)conn;
            httpURLConn.setRequestMethod("GET");
            reader = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"gbk"));
            String lineStr = reader.readLine();
            StringBuffer totalData = new StringBuffer();
            while (lineStr!=null){
                lineStr = reader.readLine();
                totalData.append(lineStr);
            }
         String str = new String(totalData);
         str = str.replaceAll("\t", "");
         str = str.replaceAll("null", "");
         str = "{"+str;
         System.out.println(str);
            JSONObject jsary=JSONObject.fromObject(str);//格式化成json对象
            JSONObject.fromObject(str);
            //JSONArray jsary=JSONArray.fromObject(str);
matchResult  = jsary.getString("result");//这里读别的值都会报错
        }catch (Exception e){
         e.printStackTrace();
     }
JSON

------解决方案--------------------
手头暂时没有用JAVA来测试的环境,我用JS测试了一下
直接解析地址返回的代码没有反应,我把代码改了一下,如下片段
[{
"result": [{
"players": [{"account_id": 4294967295}]

          }]
}]
可以得到result对象以及players对象下面的值
var jsObj=getJSONObj(info);
for(var i=0,len=jsObj.length;i<len;i++){   
var m = jsObj[i]; 
alert(m.result[0].players[0].account_id)
}
感觉应该是代码格式的事
------解决方案--------------------
再补充一下这一点:
为什么我用JSONObject读出来,只能取到result而且返回的是字符串

因为你用的是:jsary.getString("result") getString方法肯定是返回字符串的,得用取得json对象的方法。取得result的json对象,然后继续取players对象就可以了。现在返回的是字符串,自然就没办法继续向下取了。