当前位置: 首页 > 知识库问答 >
问题:

GSON-JsonSyntaxException-第7行第4列应为名称

赵雪峰
2023-03-14

我有以下结果类,其对象将作为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响应返回。详情如下:

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

主要的JAVA

使用Gson,它读取配置。json文件,并且必须返回json。

我的代码:

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

其中res.toString()获取配置。json文件内容为字符串。

我的问题是:

我遇到以下异常:

例外情况。谷歌。格森。JsonSyntaxException:com.google.格森。流动格式错误的JSONException:使用JsonReader。setLenient(true)在第7行第3列接受格式错误的JSON。谷歌。格森。JsonSyntaxException:com.google.格森。流动格式错误的JSONException:使用JsonReader。setLenient(true)在第7行第3列接受格式错误的JSON

有什么指示吗?

共有3个答案

梅跃
2023-03-14

您有两个对象,但从GSON获得一个对象。或者,您应该使用以下格式的JSON字符串从这个JSON字符串中获取结果对象。

{
    "objectid" : "test",
    "dtype" : "test",
    "type" : "test",
    "name" : "test",
    "description" : "test" 

}

第二种选择:-

你将不得不改变JSON字符串格式。你将不得不在JSON数组中改变它,并获得这个对象的ArrayList,之后,我们可以使用数组列表获得Result对象index.newJSON字符串会是这样的。

    {"resultArray":[{
    "objectid" : "test",
    "dtype" : "test",
    "type" : "test",
    "name" : "test",
    "description" : "test" 
           },
      {
    "objectid" : "test",
    "dtype" : "test",
    "type" : "test",
    "name" : "test",
    "description" : "test"
        }]}

和java代码来获取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);
              }

结果列表模型为:-

public class ResultList {
@SerializedName("resultArray")
public ArrayList<Result> resultList;
public getResultList(){
          return resultList;
           } 
       }

@注:-Result.java将使用与上面给出的相同。

湛嘉歆
2023-03-14

使用

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);
            }
法风畔
2023-03-14

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

 类似资料:
  • 问题内容: 我有以下课程: 而此代码应解析json: 哪里 JSON是: 我得到的错误是: 但是我不知道为什么,根据jsonlint,json是有效的。 我为什么会收到此错误的任何主意吗? 问题答案: 您的JSON有效-但您的映射类无效(部分不匹配)。特别是,无法将类的属性映射为给定JSON中的a。很难推荐一种备用结构来存储数据而又不会看到较大的示例,但是通常在JSON结构与Java类之间进行映射

  • 问题内容: 我有以下课程: 而此代码应解析json: 哪里 JSON是: 我得到的错误是: 但是我不知道为什么,根据jsonlint,json是有效的。 我为什么会收到此错误的任何主意吗? 问题答案: 您的JSON有效-但您的映射类无效(部分不匹配)。特别是,无法将类的属性映射为给定JSON中的a。很难推荐一个备用的结构来存储数据而不会看到更大的样本,但是通常,在JSON结构和Java类之间进行映

  • [失败:com.google.gson.jsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY但BEGIN_OBJECT位于第1行第2列路径$] 我怎么解决?

  • 问题内容: 我正在尝试使用Gson反序列化json数组,但是当前正在获取JsonSyntaxException。json字符串是由.NET MVC3 Web服务使用JsonResult创建的(意味着,我不是手动创建json,它是由我知道可以在其他几种平台上使用的库创建的)。 这是json: 这是代码: 异常表明日期格式无效: 有人知道发生了什么吗? 问题答案: 我在这里找到了答案,但奇怪的是,没有