Dynamic Json To Java Pojo

I want to map the following json to a pojo in Java. In the snippet shown below, result is a Json object, whose value is another json object which is a map. I tried converting this to a Pojo, but it failed. The keys in the result map are dynamic, and I cannot guess them prior.

         final_result : 
         { 
              "result": 
                {
                    "1597696140": 70.32,
                    "1597696141": 89.12,
                    "1597696150": 95.32,
                }
         }

The pojo that I created is :

@JsonIgnoreProperties(ignoreUnknown = true)
public class ResultData {
  Map<Long, Double> resultMap;

  public ResultData(Map<Long, Double> resultMap) {
    this.resultMap = resultMap;
  }

  public ResultData() {
  }

  @Override
  public String toString() {
    return super.toString();
  }
}

Upon trying to create the pojo using ObjectMapper :

ObjectMapper objectMapper = new ObjectMapper();
      ResultData resultData = objectMapper.readValue(resultData.getJSONObject("result").toString(), ResultData.class);

What am I possible doing wrong here ?

Answer

Assume, your JSON payload looks like below:

{
  "final_result": {
    "result": {
      "1597696140": 70.32,
      "1597696141": 89.12,
      "1597696150": 95.32
    }
  }
}

You can deserialise it to class:

@JsonRootName("final_result")
class ResultData {
    private Map<Long, Double> result;

    public Map<Long, Double> getResult() {
        return result;
    }

    @Override
    public String toString() {
        return result.toString();
    }
}

Like below:

import com.fasterxml.jackson.annotation.JsonRootName;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.util.Map;

public class Main {

    public static void main(String[] args) throws IOException {
        File jsonFile = new File("./src/main/resources/test.json");

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
        ResultData resultData = mapper.readValue(jsonFile, ResultData.class);
        System.out.println(resultData);
    }
}

Above code prints:

{1597696140=70.32, 1597696141=89.12, 1597696150=95.32}

Leave a Reply

Your email address will not be published. Required fields are marked *