Home > Software engineering >  Query on Java Jackson Implementation
Query on Java Jackson Implementation

Time:01-12

I have a json file in below format:

{   
   "resources" : {     
        "foo" : {       
          "value" : "test"      
         },     
        "bar" : {       
          "value" : "test"     
         }    
   } 
}

And, I have created it's JAVA Class as below:

package org.example.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.HashMap;
import java.util.List;

public class JsonTwoJavaFileModel {
   @JsonProperty("resources")
   private HashMap<String, HashMap<String, List<String>>>  stringListHashMap;
}

However, getting below error while reading it:

`Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `java.util.ArrayList` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('test')  at [Source: (File); line: 4, column: 17] (through reference chain: org.example.model.JsonTwoJavaFileModel["resources"]->java.util.HashMap["offer1"]->java.util.HashMap["value"])`

Not sure, how to create Java class for such type of nested JSONs. Any pointer to solve it?

Also tried creating Java Class like below:

`package org.example.model;

import com.fasterxml.jackson.annotation.JsonProperty;    
import java.util.HashMap;
import java.util.List;

public class JsonTwoJavaFileModel {
   @JsonProperty("resources")
   private HashMap<List<String>, HashMap<String, List<String>>> stringListHashMap;
}`

But no luck with both approach.

CodePudding user response:

try this something like this:

  @Test
  public void testJackson() throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();

    String json = "{\"resources\":{\"foo\":{\"value\":\"test\"},\"bar\":{\"value\":\"test\"}}}";
    HashMap<String, HashMap<String, HashMap<String, String>>> mapped = objectMapper.readValue(
            json,
            new TypeReference<>() {
              @Override
              public Type getType() {
                return super.getType();
              }
            });
    assertNotNull(mapped);
  }
}
  • Related