Custom Snap- Get response in json format

I am developing a custom SNAP that makes HTTP request and gets JSON response in return. The response is array of objects. In order to right it to document , currently it only shows up if I convert the response to string in following manner:

Map<String, Object> data = new LinkedHashMap<>();
data.put(“Response”, response);
outputViews.write(documentUtility.newDocumentFor(document, data));

But I’d like to instead preview the response in standard json format in outputview. Any idea how this can be achieved ? Any help would be appreciated . Thank you!

What is response's data type? String?

Yes- The response is of type string

This is the structured response I get when using CORE REST GET SNAP.

But with custom snap- I am unable to get the similar structure. What am I missing?

Yes, you’ll want to use the Jackson library’s ObjectMapper class for that.

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
...
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final TypeReference<Object> TYPE_REF = new TypeReference<Object>() {};
...
Object parsedResponse = OBJECT_MAPPER.readValue(response, TYPE_REF);

Note there are other versions of the readValue method that take a Reader or InputStream, which means you might be able to avoid reading the entire response as a String.

Hope that helps.

I’ll try that.
The final step would be to add parsedResponse to Map - something like this:

Map<String, Object> data = new LinkedHashMap<>();
data.put(“Response”, parsedResponse);
outputViews.write(documentUtility.newDocumentFor(document, data)) - right ?

You don’t need to add parsedResponse to a Map unless for some reason you need the output structured that way. You can just directly use parsedResponse as the output document’s data:

outputViews.write(documentUtility.newDocumentFor(document, parsedResponse));

Your solution worked like a charm!! Thank you @ptaylor