bryce
bryce

Reputation: 852

Google Gson - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT

Here is the object I try to deserialize:

public class DomaineBO {

  private String nom;

  private Set<String> codesQC;

  private Set<String> codesSql;

  ...

Here are my JSon data:

[  
   {  
      "id":30,
      "nom":"Usafe",
      "gere":true,
      "codesQC":[  
         {  
            "id":40,
            "nom":"ServicesTransversaux",
            "nomHTML":"ServicesTransversaux"
         },
         {  
            "id":41,
            "nom":"%22Services%20Transversaux%22",
            "nomHTML":"\"Services Transversaux\""
         }
      ],
      "codesSql":[  
         {  
            "id":61,
            "nom":"USAF"
         }
      ]
   },
   {  
      "id":33,
      "nom":"Epublishing",
      "gere":true,
      "codesQC":[  
         {  
            "id":45,
            "nom":"ServicesDocumentaires",
            "nomHTML":"ServicesDocumentaires"
         }
      ],
      "codesSql":[  
         {  
            "id":64,
            "nom":"EDIT"
         }
      ]
   },
   {  
      "id":25,
      "nom":"Commons",
      "gere":true,
      "codesQC":[  
         {  
            "id":34,
            "nom":"Commons",
            "nomHTML":"Commons"
         }
      ],
      "codesSql":[  
         {  
            "id":82,
            "nom":"COM"
         }
      ]
   },
   {  
      "id":22,
      "nom":"Finance",
      "gere":true,
      "codesQC":[  
         {  
            "id":27,
            "nom":"%22Refonte%20Contentieux%22",
            "nomHTML":"\"Refonte Contentieux\""
         },
         {  
            "id":28,
            "nom":"Finance",
            "nomHTML":"Finance"
         },
         {  
            "id":29,
            "nom":"%22Refonte%20Finance%20Client%22",
            "nomHTML":"\"Refonte Finance Client\""
         }
      ],
      "codesSql":[  
         {  
            "id":45,
            "nom":"FINA"
         }
      ]
   },
   {  
      "id":32,
      "nom":"Inconnu",
      "gere":true,
      "codesQC":[  

      ],
      "codesSql":[  

      ]
   },
   {  
      "id":31,
      "nom":"Marketing",
      "gere":true,
      "codesQC":[  
         {  
            "id":42,
            "nom":"Marketing_ActionsCom",
            "nomHTML":"Marketing_ActionsCom"
         },
         {  
            "id":44,
            "nom":"Vente",
            "nomHTML":"Vente"
         },
         {  
            "id":43,
            "nom":"Marketing_Produits",
            "nomHTML":"Marketing_Produits"
         }
      ],
      "codesSql":[  
         {  
            "id":63,
            "nom":"MARK"
         }
      ]
   },
   {  
      "id":26,
      "nom":"Facturation",
      "gere":true,
      "codesQC":[  
         {  
            "id":35,
            "nom":"Facturation",
            "nomHTML":"Facturation"
         }
      ],
      "codesSql":[  
         {  
            "id":54,
            "nom":"FACT"
         }
      ]
   },
   {  
      "id":24,
      "nom":"Sinistre",
      "gere":true,
      "codesQC":[  
         {  
            "id":32,
            "nom":"Sinistre",
            "nomHTML":"Sinistre"
         },
         {  
            "id":33,
            "nom":"Entreprise",
            "nomHTML":"Entreprise"
         }
      ],
      "codesSql":[  
         {  
            "id":47,
            "nom":"SINI"
         }
      ]
   },
   {  
      "id":23,
      "nom":"Partenaire",
      "gere":true,
      "codesQC":[  
         {  
            "id":31,
            "nom":"Partenaire",
            "nomHTML":"Partenaire"
         },
         {  
            "id":30,
            "nom":"Partenaires",
            "nomHTML":"Partenaires"
         }
      ],
      "codesSql":[  
         {  
            "id":46,
            "nom":"PART"
         }
      ]
   },
   {  
      "id":1,
      "nom":"Contrat",
      "gere":true,
      "codesQC":[  
         {  
            "id":24,
            "nom":"Contrat",
            "nomHTML":"Contrat"
         }
      ],
      "codesSql":[  
         {  
            "id":42,
            "nom":"CONT"
         }
      ]
   },
   {  
      "id":29,
      "nom":"Services Transverses",
      "gere":true,
      "codesQC":[  
         {  
            "id":39,
            "nom":"%22Services%20Transversaux%22",
            "nomHTML":"\"Services Transversaux\""
         },
         {  
            "id":38,
            "nom":"ServicesTransversaux",
            "nomHTML":"ServicesTransversaux"
         }
      ],
      "codesSql":[  
         {  
            "id":58,
            "nom":"SECU"
         },
         {  
            "id":57,
            "nom":"DMS"
         },
         {  
            "id":60,
            "nom":"INDE"
         },
         {  
            "id":59,
            "nom":"JBPM"
         }
      ]
   },
   {  
      "id":28,
      "nom":"Flux de données",
      "gere":true,
      "codesQC":[  
         {  
            "id":37,
            "nom":"%22Flux%20de%20donn%C3%A9es%22",
            "nomHTML":"\"Flux de données\""
         }
      ],
      "codesSql":[  
         {  
            "id":81,
            "nom":"FLUX"
         }
      ]
   },
   {  
      "id":27,
      "nom":"Reprise",
      "gere":true,
      "codesQC":[  
         {  
            "id":36,
            "nom":"Reprise",
            "nomHTML":"Reprise"
         }
      ],
      "codesSql":[  
         {  
            "id":55,
            "nom":"FINA"
         }
      ]
   },
   {  
      "id":21,
      "nom":"Batch",
      "gere":true,
      "codesQC":[  
         {  
            "id":25,
            "nom":"Batch",
            "nomHTML":"Batch"
         }
      ],
      "codesSql":[  
         {  
            "id":44,
            "nom":"BATCH"
         }
      ]
   }
]

And here is how I try to convert them:

GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
DomaineBO[] infos = (DomaineBO[]) gson.fromJson(getJSonResponse(url), clazz);
Arrays.asList(infos);

When I am at the operation to convert it in my class DomaineBO, I get the JsonSyntaxException with the message Expected a string but was BEGIN_OBJECT at line 1 column 51 path $[0].codesQC[0]

I supect it is because of the attributes that are Sets of Strings. I could try to make it with arrays but I wanted to know if there is a better way?

Upvotes: 0

Views: 503

Answers (1)

Rustam
Rustam

Reputation: 1407

It is because in code you have set of String. Make class CodeQC with fields id, nom, nomHTML and change

Set<String> codesQC 

to

Set<CodeQC> codesQC

Upvotes: 1

Related Questions