动态JSON解析错误:预期的对象开始但在行1列1时是字符串,如何解决

时间:2019-06-14 06:28:42

标签: android json parsing gson

我正在解析动态JSON,因此使用POJO(模型类)进行反编译会更加复杂

有什么方便的方法可以为我提供建议。

这是问题

public class Post {

    @SerializedName("Resource")
    @Expose
    private Resource onlineResource;

    public Resource getResource() {
        return onlineResource;
    }

      public void setResource(Resource resource) {
         this.onlineResource = resource;
      }

    }


    public class Resource {

    @SerializedName(value = "_xmlns:xlink",alternate = "xmlns:xlink")
    @Expose
    private Object xmlnsXlink;
    @SerializedName(value = "_xlink:href",alternate = "xlink:href")
    @Expose
    private Object xlinkHref;

    public Object getXmlnsXlink() {
        return xmlnsXlink;
    }

    public void setXmlnsXlink(Object xmlnsXlink) {
        this.xmlnsXlink = xmlnsXlink;
    }

    public Object getXlinkHref() {
        return xlinkHref;
    }

    public void setXlinkHref(Object xlinkHref) {
        this.xlinkHref = xlinkHref;
    }

}

对于资源类,有时会获取JSON

like:

   {
    "Resource": "abcdefgh",
   }

或者 就像:

{ 
  "Resource" :
              {
              "_xmlns:xlink":"xyz",
              "_xlink:href":"abc"
              },
}

那我怎么解析这种类型的Random(Dynamic)Json?

3 个答案:

答案 0 :(得分:0)

您只需将变量数据类型从Object更改为String:

private Object xmlnsXlink;   TO    private String xmlnsXlink;

private Object xlinkHref;  TO  private String xlinkHref;

答案 1 :(得分:0)

如果您正在使用JSON解析库(例如Gson),则不可能。您必须按照此处的建议手动解析JSON:Parsing dynamic JSON in Android

答案 2 :(得分:0)

首先使用此类作为您的资源类

    public class Resource {

    @SerializedName("_xmlns:xlink")
    @Expose
    private String xmlnsXlink;
    @SerializedName("_xlink:href")
    @Expose
    private String xlinkHref;

    public String getXmlnsXlink() {
    return xmlnsXlink;
    }

    public void setXmlnsXlink(String xmlnsXlink) {
    this.xmlnsXlink = xmlnsXlink;
    }

    public String getXlinkHref() {
    return xlinkHref;
    }

public void setXlinkHref(String xlinkHref) {
this.xlinkHref = xlinkHref;
}

}

对于某些位置的json变量,您需要使用以下命令手动解析json类型为变量(字符串/对象)的json:

json instanceof JSONObject

然后您可以在模型类中传递它的值