Skip to content

How to extract JSON from sql query?

My query looks like this:

 select MESSAGE, OFFSET from SRV_TABLE where STATUS='404';

I want to retry the messages that failed, but the message is a json string and the offset is a regular string. I need to extract the json messages and the offset strings and then iterate through each row. How would I do this? RIght now I am doing something like this:

public void retryFailedMessages() {
    JsonNode failedMessages = service.getFailedMessages();
    Iterator<JsonNode> iter = failedMessages.elements();
    while(iter.hasNext()) {
        JsonNode message =;
        String mess = message.get("MESSAGE").toString();
        String offset = message.get("OFFSET").toString();
        service.retry(mess, offset);



String responseString = "";
JsonNode responseObj = null;
List<String> responseList;

    responseLIst = dataAccessLayer.getFailedMessages();
    responseString = buildQueryResult(responseList);
    responseObj = objectMapper.readTree(responseString);
} catch( Exception e) {

return responseObj;

buildQueryResult() simply appends all the strings together so the mapper can read it altogether. The mapper ignores the offset and doesn’t include it in the json, bceause it isn’t a valid json. How do I keep the offset and message and pass both to the service.retry() method?



You need to convert your string/json to a POJO or another way to convert it to object. I recomend you to use Jackson library and map it to a pojo.

Another way is to use some tools from the database to query directly:

    JSON_VALUE(MESSAGE, '$.your.query') as query,
    JSON_VALUE(MESSAGE, '$.another.query') as another,
from SRV_TABLE where STATUS='404';

In that way you can handle the values as a string at your code.

Can read more here: