有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓gson。JsonSyntaxException:java。lang.illegalstate例外:

我是刚接触gson的人,所以犯了这个错误

com。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN_对象,但在第1行第2527列path$处为BEGIN_数组。数据击球[0]。分数[1]。解雇

这是因为API给出了不同的json回复

以下是json回复:

 "batting": [
  {
    "scores": [
      {
        "dismissal-by": {
          "name": "CE Rudd",
          "pid": "646213"
        },
        "dismissal": "stumped",
        "SR": 126,
        "6s": 0,
        "4s": 5,
        "B": 34,
        "R": 43,
        "dismissal-info": "st  Rudd b Kerr",
        "batsman": "NE Bolton",
        "pid": "267611"
      },
      {
        "dismissal-by": [
          {
            "name": "M du Preez",
            "pid": "54646"
          }
        ],
        "dismissal": "runout",
        "SR": 112,
        "6s": 0,
        "4s": 4,
        "B": 25,
        "R": 28,
        "dismissal-info": "run out (du Preez)",
        "batsman": "GEB Boyce",
        "pid": "874261"
      },
      {
        "dismissal-by": {
          "name": "LK Bell",
          "pid": "878025"
        },
        "dismissal": "catch",
        "SR": 100,
        "6s": 0,
        "4s": 2,
        "B": 27,
        "R": 27,
        "dismissal-info": "c Bell b Scholfield",
        "batsman": "AE Satterthwaite",
        "pid": "233007"
      },
      {
        "dismissal": "not out",
        "SR": 220,
        "6s": 2,
        "4s": 5,
        "B": 20,
        "R": 44,
        "dismissal-info": "not out",
        "batsman": "H Kaur",
        "pid": "372317"
      },
      {
        "dismissal": "not out",
        "SR": 100,
        "6s": 0,
        "4s": 1,
        "B": 14,
        "R": 14,
        "dismissal-info": "not out",
        "batsman": "E Threlkeld  ",
        "pid": "878035"
      },
      {
        "SR": "",
        "6s": "",
        "4s": "",
        "B": "",
        "R": "",
        "dismissal-info": "",
        "detail": "6 (b 1, w 5)",
        "batsman": "Extras",
        "pid": 0
      }
    ],
    "title": "Lancashire Thunder Innings"
  },

按对象获取第二次解雇时的错误

第一次按对象删除是从一个对象开始的,第二次按对象删除是从一个数组开始的

这是分数数组的java类

public class Score__ implements Serializable {

@SerializedName("dismissal-by")
@Expose
private DismissalBy dismissalBy;
@SerializedName("dismissal")
@Expose
private String dismissal;
@SerializedName("SR")
@Expose
private String sR;
@SerializedName("6s")
@Expose
private String _6s;
@SerializedName("4s")
@Expose
private String _4s;
@SerializedName("B")
@Expose
private String b;
@SerializedName("R")
@Expose
private String r;
@SerializedName("dismissal-info")
@Expose
private String dismissalInfo;
@SerializedName("batsman")
@Expose
private String batsman;
@SerializedName("pid")
@Expose
private Integer pid;
@SerializedName("detail")
@Expose
private String detail;

public DismissalBy getDismissalBy() {
    return dismissalBy;
}

public void setDismissalBy(DismissalBy dismissalBy) {
    this.dismissalBy = dismissalBy;
}

public String getDismissal() {
    return dismissal;
}

public void setDismissal(String dismissal) {
    this.dismissal = dismissal;
}

public String getSR() {
    return sR;
}

public void setSR(String sR) {
    this.sR = sR;
}

public String get6s() {
    return _6s;
}

public void set6s(String _6s) {
    this._6s = _6s;
}

public String get4s() {
    return _4s;
}

public void set4s(String _4s) {
    this._4s = _4s;
}

public String getB() {
    return b;
}

public void setB(String b) {
    this.b = b;
}

public String getR() {
    return r;
}

public void setR(String r) {
    this.r = r;
}

public String getDismissalInfo() {
    return dismissalInfo;
}

public void setDismissalInfo(String dismissalInfo) {
    this.dismissalInfo = dismissalInfo;
}

public String getBatsman() {
    return batsman;
}

public void setBatsman(String batsman) {
    this.batsman = batsman;
}

public Integer getPid() {
    return pid;
}

public void setPid(Integer pid) {
    this.pid = pid;
}

public String getDetail() {
    return detail;
}

public void setDetail(String detail) {
    this.detail = detail;
}

}

java类的解雇

public class DismissalBy implements Serializable {

@SerializedName("name")
@Expose
private String name;
@SerializedName("pid")
@Expose
private String pid;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPid() {
    return pid;
}

public void setPid(String pid) {
    this.pid = pid;
}

}

如何解决这个问题? 任何帮助都将不胜感激


共 (3) 个答案

  1. # 1 楼答案

    在JSON对象中,有一个

    "dismissal-by": {
              "name": "LK Bell",
              "pid": "878025"
            },
    

    你不能这样使用它,因为你把它声明为一个数组,它应该保持相同的类型,因为你需要把它改成

      "dismissal-by"":[
        {
              "name": "LK Bell",
              "pid": "878025"
            }
        ]
    

    ,

    要解决这个问题,需要手动解析所有JSON,就像

    Json json = new Json(string);
    try{
    json.getJsonArray("dismissal-by");
    }catch(IllegalStateException e)
    {
    json.getObject("dismissal-by");  
    }
    
  2. # 2 楼答案

    在数组格式中(以[和]开头,以]结尾),而在Json对象{}中,最好从API开发者那里解决它。或者,您可以将其声明为字符串,并在以后需要时进行解析

    public class Score__ implements Serializable {
    
    @SerializedName("dismissal-by")
    @Expose
    private String dismissalBy;}
    
  3. # 3 楼答案

    那个JSON是无效的。。。因此com.google.gson.JsonSyntaxException

    它需要从一个{开始,在"title": "Lancashire Thunder Innings"之后,有一个}]缺失

    在那里你可以自己检查:https://jsonlint.com