2016-03-23 10 views
0

これは本当にうまくいきませんが、2つの質問があります:ジャクソン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」と「画像」の1つのURLである:ここでは

は、私がこれまでに働いていたコードですJSONは https://api.spotify.com/v1/search?q=track:Ready%20To%20Fall%20artist:rise%20against%20&type=trackにあります。

答えて

1

Jsonレスポンスをクラスにマップする必要がありますか?

そうでない場合は、次のように希望の値を取得できます。 preview_url

readTreeを使用すると、jsonの結果をノードのツリーにマップできます。

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

64 x 64画像URLなどの特定の「URL」を選択する方法はありますか? –

+0

はい可能です。あなたのサンプルURLが2つのアルバムを含むアイテムの配列を生成することに気付きました。私はすぐに私の答えを更新するつもりです – starcorn