2016-03-23 174 views
0

我真的很討厭這樣做,但我有兩個問題:can Jackson 2.7.3能解析下面的url,並且可以解析JSON的每一部分嗎?傑克遜用java解析

這裏是我與迄今使用的代碼:

public class Song { 
private String tracks; 
private String album; 
private String images; 

public void setTracks(String tracks){ 
    this.tracks=tracks; 
} 
public void setAlbum(String album){ 
    this.album= album; 
} 
public void setImages (String images){ 
    this.images= images; 
} 
} 

而且

Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       ObjectMapper mapper = new ObjectMapper(); 
       Document doc = Jsoup.connect("http://api.spotify.com/v1/search?q=track:" + finalSong + "%20artist:" + finalArtist+"%20" + "&type=track").ignoreContentType(true).get(); 
       String title = String.valueOf(doc.body().text()); 

       Song obj = mapper.readValue(String.valueOf(title), Song.class); 

      } catch (JsonGenerationException e) { 
       e.printStackTrace(); 
      } catch (JsonMappingException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    thread.start(); 

    return null; 
} 

所有我需要的是「PREVIEW_URL」和「圖像」的一個URL朝上方 JSON位於https://api.spotify.com/v1/search?q=track:Ready%20To%20Fall%20artist:rise%20against%20&type=track

回答

1

您是否需要將Json響應映射到類中?

如果不是,你可以得到你想要的值如下。對於preview_url

您可以使用readTreejson結果映射到節點樹中。

在此之後,您可以使用findPath搜索您要查找的財產。

如果是image,它包含一個數組。因此,如果你想從列表中選擇一個特定的項目,你可以使用get來選擇你想要的特定項目。

例如

JsonNode readTree = mapper.readTree(body); 

for (JsonNode node : readTree.findPath("items")) { 
    System.out.println(node.findPath("images").get(2)); 
    System.out.println(node.findPath("preview_url")); 
} 
+0

哇!謝謝,它似乎在工作! –

+0

會有一種方法可以選擇某個「url」,例如64 x 64圖片url嗎? –

+0

是的,這是可能的。我還注意到,您的示例url會產生一個包含兩個相冊的項目數組。我將在一會兒更新我的答案 – starcorn