AJT_82 AJT_82 - 4 months ago 24
Java Question

JSON to POJO (nested) using Jackson

This shouldn't be such a tricky question, but I'm a newbie, and I haven't found an example that helps me.

I have JSON like this (very simplified):

{
"documents": [
{
"title": "Jobs",
"abstract": "<span class=\"hit\">Jobs</span> may refer to:\n\n* Steve <span class=\"hit\">Jobs</span> (1955–2011), co-founder and former CEO of consumer electronics company...<br />",
"id": "Jobs",
"url": "http://en.wikipedia.org/wiki/Jobs"
},
],

"sessionid": "0d12681c-2f98-4d67-a044-d9baab260b09",
"q": "Jobs",
}


This needs to be converted to a Java Object
SearchQuery


Looks like this:

public class SearchQuery {

private List<SearchQueryDocument> documents = new ArrayList<SearchQueryDocument>
private sessionid;
private q;

//getters and setters

}


And with a class
SearchQueryDocument
:

public class SearchQueryDocument {

private String title;

@JsonProperty("abstract")
private String abstractText

private String id;
private String url;

//getters and setters

}


When I convert the JSON like this:

ObjectMapper mapper = new ObjectMapper();
SearchQuery sq = mapper.readValue(output, SearchQuery.class);

//prints correct sessionid!
//0d12681c-2f98-4d67-a044-d9baab260b09
System.out.println(sq.getSessionid());

//doesn't work
//prints: ['my package name here'.SearchQueryDocument@385073cf]
System.out.println(sq.getDocuments());


I realize the problem lies with that the "documents" is a List of
SearchQueryDocument
, but I don't know how to solve this?? I've found some nice and helpful examples online like MKYong, but never with this that there is a nested class involved. Tried doing searches here on SO as well. Maybe I'm using the wrong search keywords since I suspect there should be many examples out there...

Thankful for any help!

5er 5er
Answer

You need to iterate trough sq.documents and print them out. Do it with for loop or with Iterable.

List<SearchQueryDocument> documents = sq.getDocumnets()

for (String document : documents) {
    System.out.println(document.getId());
}

You can also do:

for (String document : documents) {
        System.out.println(document);
}

but in this case you need to override toString method in SearchQueryDocument.class