我有以下结果类,其对象将作为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;
}
}
我有一个配置json,它读取我的主.java并以json作为HTTP RESPONSE返回。如下:
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test" // removed
},
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
}
Main .java
使用Gson,它会读取configuration.json文件,并且必须返回一个json。
我的代码:
Gson g = new Gson();
Result r = g.fromJson(res.toString(), Result.class);
其中res.toString()
将configuration.json文件内容作为字符串获取。
我的问题:
我遇到以下异常:
异常com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)接受第7行第3列的格式错误的JSON com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第7行第3列接受格式错误的JSON
任何指针?
答案 0 :(得分:15)
如果这是实际的json:你这里有一个额外的逗号和一个拼写错误。错误说你有错误的json语法。所以这可能是最先看的地方之一。
{
"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"
}
您似乎也正在解析两个对象,并告诉gson您需要一个结果对象。 考虑分别解析对象或告诉gson你想要一个结果数组返回
答案 1 :(得分:3)
使用
catch(JsonSyntaxException e)
而不是
catch(MalformedJsonException e)
因为MalformedJsonException是一些内部异常,而JsonSyntaxException是实际被抛出的异常。这是一段代码片段
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);
}
答案 2 :(得分:0)
你有两个对象但从GSON获得一个对象。您应该使用以下格式的JSON字符串从此JSON字符串中获取Result对象。
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
}
第二个选项: -
您必须更改JSON字符串格式。您将不得不在JSON数组中更改它并获取此对象的ArrayList,之后,我们可以使用数组列表index获取Result对象。新的JSON字符串将是这样的。
{"resultArray":[{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
},
{
"objectid" : "test",
"dtype" : "test",
"type" : "test",
"name" : "test",
"description" : "test"
}]}
用于获取结果对象的java代码。
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模型是: -
public class ResultList {
@SerializedName("resultArray")
public ArrayList<Result> resultList;
public getResultList(){
return resultList;
}
}
@注意: - Result.java将与上面给出的相同。
答案 3 :(得分:0)
我的问题是JSON字符串太长,解析器无法处理。我缩短了琴弦,奏效了。