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

2022-09-03 12:16:22

我有以下结果类,其对象将作为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,并以http RESPONSE的形式返回为json。具体如下:

{
        "objectid" : "test",
        "dtype" : "test",
        "type" : "test",
        "name" : "test",
        "description" : "test" // removed
},
{
        "objectid" : "test",
        "dtype" : "test",
        "type" : "test",
        "name" : "test",
        "description" : "test"
}

主要.java

使用Gson,它读取configal.json文件,并且必须返回一个json。

我的代码:

Gson g = new Gson();
Result r = g.fromJson(res.toString(), Result.class);

其中,将 configuration.json 文件内容作为字符串获取。res.toString()

我的问题:

我遇到以下异常:

Exception com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) 在第 7 列第 3
列接受格式错误的 JSON com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) 在第 7 列第 3 列接受格式错误的 JSON

任何指针?


答案 1

如果这是实际的 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您想要一个结果数组 Back


答案 2

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);
            }