I have the following result class whose object is to be returned as JSON.
public class Result {
public String objectid;
public String dtype;
public String type;
public String name;
public String description;
public Result() {
this.objectid = "";
this.dtype= "";
this.type="";
this.name= "";
this.description = "";
}
public String getObjectid() {
return objectid;
}
public void setObjectid(String s) {
this.objectid = s;
}
public String getDtype() {
return dtype;
}
public void setDtype(String s) {
this.dtype= s;
}
public String getType() {
return type;
}
public void setType(String s) {
this.type = s;
}
public String getName() {
return name;
}
public void setName(String s) {
this.name = s;
}
public String getDescription() {
return description;
}
public void setDescription(String s) {
this.description = s;
}
}
I have a configuration json which is read my the main .java and returned as json as HTTP RESPONSE. It is as below:
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test" // removed
},
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
}
Main .java
Using Gson, it reads the configuration.json file and has to return a json.
My code:
Gson g = new Gson();
Result r = g.fromJson(res.toString(), Result.class);
where res.toString()
gets me the configuration.json file content as string.
My problem:
I am experiencing the following exception:
Exception com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 7 column 3
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 7 column 3
Any pointers?
If this is the actual json: You have an extra comma here and a spelling error. The error says you have bad json syntax. So this is probably one of the first places to look.
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name " : "test",
"description" : "test", //delete this comma
},
{
"objectid" : "test",
"dtyoe" : "test", // spelling error
"type" : "test",
"name " : "test",
"description" : "test"
}
You also seem to be parsing two objects and telling gson you want one result object from it. Consider either parsing the objects separately or tell gson you want a result array Back
use
catch(JsonSyntaxException e)
instead of
catch(MalformedJsonException e)
because MalformedJsonException is some internal exception while JsonSyntaxException is the one that actually get thrown. here is a code snippet
String response="Something";
JsonElement my_json;
try {
my_json=jsonParser.parse(response);
} catch(JsonSyntaxException e) {
e.printStackTrace();
JsonReader reader = new JsonReader(new StringReader(response));
reader.setLenient(true);
my_json=jsonParser.parse(reader);
}
You have two objects but getting one object from GSON. either you should use below format of JSON string to get Result object from this JSON string.
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
}
Second option :-
You will have to change JSON string format. you will have to change it in JSON array and get ArrayList of this object, After that, we can get Result object using array list index.new JSON string would be like this.
{"resultArray":[{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
},
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
}]}
And java code to fetch Result Object.
Gson g = new Gson();
ResultList r = g.fromJson(res.toString(), ResultList.class);
ArrayList<Result> resultList = r.getResultList();
for(int x=0 ;x<resultList.size();x++){
Result result = resultList.get(x);
}
ResultList Model is:-
public class ResultList {
@SerializedName("resultArray")
public ArrayList<Result> resultList;
public getResultList(){
return resultList;
}
}
@Note: - Result.java would be used same as given above.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With