2016-03-23 6 views
0

Ich hasse es wirklich, dies zu tun, aber ich habe zwei Fragen: Kann Jackson 2.7.3 die folgende URL analysieren und kann ich jeden Teil des JSON analysieren? HierJackson Parsing mit Java

ist der Code, den ich mit so viel arbeite:

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; 
} 
} 

Und

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; 
} 

Alles was ich brauche ist die "preview_url" und einer der "Bilder" url nach oben Der JSON befindet sich unter https://api.spotify.com/v1/search?q=track:Ready%20To%20Fall%20artist:rise%20against%20&type=track.

Antwort

1

Müssen Sie Ihre Json-Antwort in eine Klasse mappen?

Wenn nicht, können Sie Ihre gewünschten Werte erhalten, z. für preview_url

Sie können readTree verwenden, um das json Ergebnis in einen Knotenbaum zu mappen.

Dort können Sie findPath verwenden, um nach der gesuchten Eigenschaft zu suchen.

Im Fall von image enthält es ein Array. Wenn Sie also einen bestimmten Artikel aus dieser Liste auswählen möchten, verwenden Sie get, um den gewünschten Artikel auszuwählen.

Beispiel

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

Wow! Danke, es scheint zu funktionieren! –

+0

Wäre es möglich, eine bestimmte "URL" wie die 64 x 64-Bild-URL auszuwählen? –

+0

ja das ist möglich. Mir ist auch aufgefallen, dass deine Beispiel-URL ein Array von Elementen mit zwei Alben ergeben würde. Ich werde meine Antwort in einem Moment aktualisieren – starcorn