Android中如何从指定JSON接口提取目标URL字段
解决JSON提取URL的问题
首先看接口返回的JSON结构:
{"file_length":300,"versions":[{"size":38267700,"url":"https:\/\/sto006.sh-content.com\/v\/01\/00158\/v4h6zad7kdr1_n\/v4h6zad7kdr1_n.mp4?t=x7xUQpMLNKmr2glDAIN6YetW_hucsU9gzLOq6ifOuWw&s=1677397458&e=129600&f=790153&sp=300&i=0.0","name":"n"}],"player_img":"https:\/\/sh-content.xyz\/v4h6zad7kdr1_xt.jpg"}
你的代码核心错误是尝试获取result字段,但该JSON中不存在这个键。正确的提取路径是:
- 从根JSON对象中获取
versions数组 - 取出数组的第一个元素(当前数组仅包含一个对象)
- 从该对象中提取
url字段
修正后的Volley请求代码如下:
RequestQueue queue = Volley.newRequestQueue(MainActivity.this); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, Url, null, response -> { try { // 获取versions数组 JSONArray versionsArray = response.getJSONArray("versions"); if (versionsArray.length() > 0) { // 获取数组第一个元素 JSONObject versionObj = versionsArray.getJSONObject(0); // 提取目标URL String targetUrl = versionObj.getString("url"); Log.d("name", targetUrl); } else { Log.d("name", "versions数组为空"); } } catch (JSONException e) { e.printStackTrace(); Toast.makeText(MainActivity.this, "解析JSON出错", Toast.LENGTH_SHORT).show(); } }, error -> { Toast.makeText(MainActivity.this, "请求数据失败", Toast.LENGTH_SHORT).show(); }); queue.add(jsonObjectRequest);
额外说明
- 增加数组长度判断,避免数组为空时抛出异常
- 细化异常提示,方便排查问题
- JSON中转义的
\/会在getString后自动转换为正常的/,无需额外处理
内容的提问来源于stack exchange,提问作者charle
相关产品推荐
相关产品推荐

