GSON - JsonSyntaxException - 第7行第4列的预期名称

时间:2013-07-25 15:41:53

标签: java json rest jax-rs gson

我有以下结果类,其对象将作为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

任何指针?

4 个答案:

答案 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字符串太长,解析器无法处理。我缩短了琴弦,奏效了。