Java 如何从JSON(LastFM API)中提取图像的url
我是JSON的初学者 因此,我尝试从JSON回复中提取图像的url 下面是允许我获取数组的代码:Java 如何从JSON(LastFM API)中提取图像的url,java,android,json,Java,Android,Json,我是JSON的初学者 因此,我尝试从JSON回复中提取图像的url 下面是允许我获取数组的代码: // Instantiate the RequestQueue. RequestQueue queue = Volley.newRequestQueue(getActivity()); //String url ="http://www.google.com"; String url = "http://
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(getActivity());
//String url ="http://www.google.com";
String url = "http://ws.audioscrobbler.com/2.0/?method=album.search&album="+albumName+"&api_key=c51f8eb36bad&format=json";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
//mTextView.setText("Response is: "+ response.substring(0,500));
Log.i("RESPONSE","Response is: "+ response);
JSONObject jsono = new JSONObject();
try {
jsono = new JSONObject(response);
//String url = jsono.getString("results");
//Log.i("RESPONSE",url);
} catch (JSONException e) {
e.printStackTrace();
Log.d ("RESPONSE",e.getMessage());
}
JSONArray jsonArray = new JSONArray();
try {
jsonArray = jsono.getJSONObject("results").getJSONObject("albummatches").getJSONArray("album");
} catch (JSONException e) {
e.printStackTrace();
Log.d ("RESPONSE",e.getMessage());
}
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = new JSONObject();
try {
object = jsonArray.getJSONObject(i);
Log.i("RESPONSE",object.getString("image"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("RESPONSE","That didn't work!");
}
});
queue.add(stringRequest);
如何获取给定大小的图像的url
非常感谢您的建议。正如Raghunandan提到的,您正在提取一个JSONObject,当您需要提取一个JSONArray时,您可以从该数组中提取一个JSONObject
尝试使用类似的库来简化此任务,或参考此小型JSON库。解析JSON数组实际上非常简单:
JSONArray jsonarray = new JSONArray("album");
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject jsonobject = jsonarray.getJSONObject(i);
String url = jsonobject.getString("url");
}
希望对你有帮助 JSON只不过是一种键值表示。掌握它并不难。你的代码应该是这样的 更新:这将只打印大小=中等的URL
你可以用谷歌GSON来做这个。将其作为依赖项导入 首先创建一个相册类
public class Albums {
private List<Album> album;
public List<Album> getAlbum() {
return album;
}
public class Album{
private String name;
private String artist;
private String id;
private String url;
public String getName() {
return name;
}
public String getArtist() {
return artist;
}
public String getId() {
return id;
}
public String getUrl() {
return url;
}
public List<Image> getImage() {
return image;
}
public class Image {
@SerializedName("#text")
private String text;
private String size;
public String getText() {
return text;
}
public String getSize() {
return size;
}
}
private List<Image> image;
}
这将把你的json映射到java对象。注意:你可以随意从POJO中删除不需要的对象
您可以使用getter函数获取图像,以查找图像媒体的url,我是这样做的:
ArrayList<String> listUrl = new ArrayList<String>();
for(int i=0; i<jsonArray.length(); i++)
{
JSONObject myIterator = null;
try {
myIterator = jsonArray.getJSONObject( i );
JSONArray arrayOne = myIterator.getJSONArray( "image" );
for(int j=0; j<arrayOne.length(); j++)
{
JSONObject myInnerIterator = arrayOne.getJSONObject( j );
String s = myInnerIterator.getString( "size" )+myInnerIterator.getString("#text");
if (s.contains("medium") && s.contains("https")){
listUrl.add (s.replace("medium",""));
Log.i("RESPONSE",s.replace("medium",""));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
我想一定有更好的。。。但它确实起作用了 您的回复是jsonarray名称相册。所以这个jsono=新的JSONObject响应;不正确。这只是答案的摘录。。。这正是阵列部分。我已经编写了代码:jsonArray=jsono.getJSONObjectresults.getJSONObjectalbummatches.getJSONArrayalbum;答案中没有url,但是文本没有,但是哦,对不起,我理解错了你的问题,我正在解析上面的url,而不是上面由@Parag回答的图像url,应该可以解决你的问题。谢谢你,我通过你的双重迭代找到了所有的url。但是如何获得单个大小,例如中等大小?如果您想获得相应文本的大小,只需使用myInnerIterator.getString大小;但我不能再次迭代,因为myInnerIterator中没有数组,所以JSONArray arrayTwo=myInnerIterator.getJSONArray size;给我一个例外。。。感谢你们的耐心:谢谢你们,比我更好的解决方案我很高兴能帮上忙:Albums Albums=gson.fromJsonjsono.optStringalbum,Albums.class;返回空值??
public class Albums {
private List<Album> album;
public List<Album> getAlbum() {
return album;
}
public class Album{
private String name;
private String artist;
private String id;
private String url;
public String getName() {
return name;
}
public String getArtist() {
return artist;
}
public String getId() {
return id;
}
public String getUrl() {
return url;
}
public List<Image> getImage() {
return image;
}
public class Image {
@SerializedName("#text")
private String text;
private String size;
public String getText() {
return text;
}
public String getSize() {
return size;
}
}
private List<Image> image;
}
Gson gson = new Gson();
// Im assuming "response" as the above JSON object
Albums albums = gson.fromJson(response.optString("album"),Albums.class);
ArrayList<String> listUrl = new ArrayList<String>();
for(int i=0; i<jsonArray.length(); i++)
{
JSONObject myIterator = null;
try {
myIterator = jsonArray.getJSONObject( i );
JSONArray arrayOne = myIterator.getJSONArray( "image" );
for(int j=0; j<arrayOne.length(); j++)
{
JSONObject myInnerIterator = arrayOne.getJSONObject( j );
String s = myInnerIterator.getString( "size" )+myInnerIterator.getString("#text");
if (s.contains("medium") && s.contains("https")){
listUrl.add (s.replace("medium",""));
Log.i("RESPONSE",s.replace("medium",""));
}
}
} catch (JSONException e) {
e.printStackTrace();
}