Ошибка динамического синтаксического анализа JSON: ожидается-начало-объект-но-была-строка-на-строке-1-столбце-1, как ее устранить - PullRequest
0 голосов
/ 14 июня 2019

Я анализирую динамический 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

нравится:

   {
    "Resource": "abcdefgh",
   }

в качестве альтернативы как:

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

Так, как я мог разобрать этот тип случайного (динамического) Json?

Ответы [ 3 ]

0 голосов
/ 14 июня 2019

Это невозможно, если вы используете библиотеку синтаксического анализа JSON, такую ​​как Gson. Вы должны проанализировать JSON вручную, как предложено здесь: Анализ динамического JSON в Android

0 голосов
/ 14 июня 2019

Сначала используйте этот класс в качестве класса ресурсов

    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

и затем вы можете передать его значение в классе модели

0 голосов
/ 14 июня 2019

Вы просто измените тип данных переменной с Object на String:

private Object xmlnsXlink;   TO    private String xmlnsXlink;

И

private Object xlinkHref;  TO  private String xlinkHref;
...