Using Gson fromJson method not working

10,512

You probably printed the gson object instead of the ar object, as @Pillar noted in the comments.

I've tried your example and it works as expected. Also, the Id field is not being set because the name of the property does not match. You should use @SerializedName or change any of the names. This has also been noted in the comments.

This is the working example:

package net.sargue.gson;

import com.google.gson.Gson;
import org.intellij.lang.annotations.Language;

public class SO36553536 {
  public static void main(String[] args) {
    @Language("JSON")
    String json = "{\n" +
            "  \"RequestId\": 255,\n" +
            "  \"RequestTime\": \"2016-04-08T17:00:40.327\",\n" +
            "  \"Otp\": \"123456\",\n" +
            "  \"AppName\": \"This is my app name\",\n" +
            "  \"IsAwaitingResponse\": false\n" +
            "}";

    Gson gson = new Gson();
    AccessRequest ar;
    ar = gson.fromJson(json, AccessRequest.class);
    System.out.println("ar.getClass() = " + ar.getClass());
    System.out.println("ar = " + ar);
  }

  public class AccessRequest {
    public int Id;
    public String RequestTime;
    public String Otp;
    public String AppName;
    public Boolean IsAwaitingResponse;

    @Override
    public String toString() {
      return "AccessRequest{" + "Id=" + Id +
              ", RequestTime='" + RequestTime + '\'' +
              ", Otp='" + Otp + '\'' +
              ", AppName='" + AppName + '\'' +
              ", IsAwaitingResponse=" + IsAwaitingResponse +
              '}';
    }
  }
}

And this is the execution output:

ar.getClass() = class net.sargue.gson.SO36553536$AccessRequest
ar = AccessRequest{Id=0
, RequestTime='2016-04-08T17:00:40.327'
, Otp='123456'
, AppName='This is my app name'
, IsAwaitingResponse=false}
Share:
10,512
jjharrison
Author by

jjharrison

Updated on June 04, 2022

Comments

  • jjharrison
    jjharrison almost 2 years

    I have a json string that is represented as below:

     "{"RequestId":255,
      "RequestTime":"2016-04-08T17:00:40.327",
      "Otp":"123456",
      "AppName":"This is my app name",
      "IsAwaitingResponse":false}"
    

    I also have a class object below that I wish to create using the Gson library fromJson() method...

    public class AccessRequest{
        public int Id;
        public String RequestTime;
        public String Otp;
        public String AppName;
        public Boolean IsAwaitingResponse;
    }
    

    Now when I call the gson.fromJson method it does not error but my object is not getting set. This is the code I'm using...

    Gson gson = new Gson();
    AccessRequest ar;
    ar = gson.fromJson(jsonString, AccessRequest.class);
    

    It is instead setting my 'ar' variable to some strange gson object that clearly is wrong but no error is thrown.

    {serializeNulls:falsefactories:[Factory[typeHierarchy=com.google.gson.JsonElement,adapter=com.google.gson.internal.bind.TypeAdapters$25@e8dad0a],

    From what I can see, there is no error in my Json string ( although I am new to json ) , so I'm not really sure why this method wouldn't be working...