Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON Decode Custom Class with HashMap member using GSON in Java

I have the following class:

class IndexItem {
    private String word;
    private HashMap<String, Integer> docs;
    private Integer total;

    public IndexItem(String word) {
        this.total = 0;
        this.docs = new HashMap<String, Integer>();
        this.word = word;
    }

    public IndexItem() {
        this.total = 0;
        this.docs = new HashMap<String, Integer>();
        this.word = "";
    }
}

I also have the following JSON string encoded from one of this classes instances using GSON:

{"word":"refer","docs":{"c84ada58bb47e7ee8fab14d6d0ae1978.html":7,"7664010c28b7366813f52b30fd683f43.html":6,"a51ed147e16ea44244d7362367caeb4e.html":2},"total":15}

I tried running the following command to decode this string:

IndexItem item = new Gson().fromJson(jsonStr, IndexItem.class);

And I get the following error message when I try running it:

Exception in thread "main" com.google.gson.JsonParseException: 
  The JsonDeserializer MapTypeAdapter failed to deserialized 
  json object
    {"c84ada58bb47e7ee8fab14d6d0ae1978.html":7,"7664010c28b7366813f52b30fd683f43.html":6,"a51ed147e16ea44244d7362367caeb4e.html":2} 
    given the type class java.util.HashMap
at  
   com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:63)
at
com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88)
at 
com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCustomHandler(JsonObjectDeserializationVisitor.java:116)

I am new to GSON and haven't dealt with Java in a long time. So my question is:

Is there a way to get GSON to decode the HashMap in my class? OR am I going about this all wrong and should take a different approach? If so where should I look?

like image 709
chadgh Avatar asked Aug 30 '26 12:08

chadgh


2 Answers

Sorry to answer my own question, but...

Make sure the white space is cleaned up around your JSON string before sending it to Gson.

like image 196
chadgh Avatar answered Sep 02 '26 05:09

chadgh


What version of Gson are you using? I've tried this on 1.3, 1.4, 1.5 and 1.6 and it worked perfectly

like image 29
tddmonkey Avatar answered Sep 02 '26 03:09

tddmonkey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!