android,gson无法将json字符串解析为java对象

时间:2016-04-24 13:03:09

标签: android json gson

我收到此错误。 java.lang.IllegalStateException:预期为BEGIN_OBJECT但在第1行第44列为STRING。

我知道在这个问题上有类似的问题,他们只是没有帮助我。 我的json字符串格式正确,因为我可以在任何json编辑器中查看它。

之前我用不同的json字符串对我有用,请告诉我这个错误是什么。

这是我的代码:

Gson gson = new Gson();
data = gson.fromJson(result, Data3Nir.class);

这是java数据对象

public class Data3Nir {

private List<LinksEntity> links;

public void setLinks(List<LinksEntity> links) {
    this.links = links;
}

public List<LinksEntity> getLinks() {
    return links;
}

public static class LinksEntity {


    private LinkEntity link;

    public void setLink(LinkEntity link) {
        this.link = link;
    }

    public LinkEntity getLink() {
        return link;
    }

    public static class LinkEntity {
        private String title;
        private String link_place_in_list;
        private String web_link;


        private WebLinkIconEntity web_link_icon;

        public void setTitle(String title) {
            this.title = title;
        }

        public void setLink_place_in_list(String link_place_in_list) {
            this.link_place_in_list = link_place_in_list;
        }

        public void setWeb_link(String web_link) {
            this.web_link = web_link;
        }

        public void setWeb_link_icon(WebLinkIconEntity web_link_icon) {
            this.web_link_icon = web_link_icon;
        }

        public String getTitle() {
            return title;
        }

        public String getLink_place_in_list() {
            return link_place_in_list;
        }

        public String getWeb_link() {
            return web_link;
        }

        public WebLinkIconEntity getWeb_link_icon() {
            return web_link_icon;
        }

        public static class WebLinkIconEntity {
            private String src;
            private String alt;

            public void setSrc(String src) {
                this.src = src;
            }

            public void setAlt(String alt) {
                this.alt = alt;
            }

            public String getSrc() {
                return src;
            }

            public String getAlt() {
                return alt;
            }
        }
    }
}

}

这是我试图解析为java对象的结果字符串

{
  "links": [
    {
      "link": {
        "title": "ראשי",
        "link_place_in_list": "1",
        "web_link": "http://app.bsn.co.il/node/9058",
        "web_link_icon": {
          "src": "http://bsn.co.il/sites/default/files/7b258ff5-819c-4de4-a6c9-482ecc847a0a.Png",
          "alt": ""
        }
      }
    }

  ]
}

2 个答案:

答案 0 :(得分:1)

你的json字符串看起来很正确,但我对你解析数据的方式有疑问导致gson解析不能在complexe字段上工作,除非你使用自定义deSerializer,否则你可以尝试使用下面的代码

Gson gson = new Gson();
Type type = new TypeToken<ArrayList<LinksEntity>>(){}.getType()
data = gson.fromJson(result.get("links").getAsJsonArray(), type);

答案 1 :(得分:1)

json结构看起来不错。 也许问题是你使用的是希伯来字符串:"title": "ראשי", 也许你正在使用旧版本的Gson jar? 无论如何,尝试将希伯来语字符串更改为英语字符串并重新检查。 它也在我的机器上工作,也有希伯来语。