Taylor Courtney
Taylor Courtney

Reputation: 813

Jackson Parsing with java

I really hate to do this, but I have two questions: can Jackson 2.7.3 parse the following url and can do I have to parse every part of the JSON?

Here is the code I am working with so far:

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

And

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

All I need is the "preview_url" and one of the "images" url towards the top the JSON is located at https://api.spotify.com/v1/search?q=track:Ready%20To%20Fall%20artist:rise%20against%20&type=track.

Upvotes: 0

Views: 616

Answers (1)

starcorn
starcorn

Reputation: 8551

Do you necessary need to map your Json response into a class?

If not you can get your desired values as following e.g. for preview_url

You can use readTree to map the json result into a tree of nodes.

There after you can use findPath to search for the property you looking for.

In the case of image it contains an array. Thus if you want to select a specific item from that list you get use get to select the specific item you want.

example

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

Upvotes: 1

Related Questions