Как нереализовать JSON с помощью GSON?Получить ошибку - PullRequest
0 голосов
/ 23 июня 2019

Структура json, который я сохранил в строке:

{
"0": {
        "PDate": "2019-02-25 00:00:00.0000000",
        "DDate": "2019-06-25 00:00:00.0000000",
        "Document": "FC",
        "Direction": "CALLE ...."     
     },
"1": {
        "PDate": "2019-02-25 00:00:00.0000000",
        "DDate": "2019-06-25 00:00:00.0000000",
        "Document": "FC",
        "Direction": "CALLE ...."  
     }
}

Я использую следующий код, но он показывает ошибку в последней строке:

if (response.isSuccessful()){
    Object object = response.body();
    String jsonString = String.valueOf(object);
    Gson gson = new Gson();

    Type empMapType = new TypeToken<Map<Integer, Object>>() {}.getType();
    Map<Integer, Object> nameObjectJson = gson.fromJson(jsonString, empMapType);
}

Сообщение об ошибке:

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 29 path $..PostingDate

Пожалуйста, мне нужна помощь.Спасибо

Ответы [ 3 ]

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

Я заметил, что сообщение об ошибке включает в себя «$ .. PostingDate» но я НЕ могу уточнить содержание "response.body ()", попробуйте это:

String jsonString = String.valueOf(object);

=>

String jsonString = object.toString();

И попробуйте распечатать, чтобы увидеть, что это такое.

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

Создайте свою модель данных

class Example {

    @SerializedName("PDate")
    @Expose
    private String pDate;
    @SerializedName("DDate")
    @Expose
    private String dDate;
    @SerializedName("Document")
    @Expose
    private String document;
    @SerializedName("Direction")
    @Expose
    private String direction;

    public String getPDate() {
        return pDate;
    }

    public void setPDate(String pDate) {
        this.pDate = pDate;
    }

    public String getDDate() {
        return dDate;
    }

    public void setDDate(String dDate) {
        this.dDate = dDate;
    }

    public String getDocument() {
        return document;
    }

    public void setDocument(String document) {
        this.document = document;
    }

    public String getDirection() {
        return direction;
    }

    public void setDirection(String direction) {
        this.direction = direction;
    }

}

А теперь разбери

  Gson gson = new Gson();
        String json = "{\n" +
                "\"0\": {\n" +
                "        \"PDate\": \"2019-02-25 00:00:00.0000000\",\n" +
                "        \"DDate\": \"2019-06-25 00:00:00.0000000\",\n" +
                "        \"Document\": \"FC\",\n" +
                "        \"Direction\": \"CALLE ....\"     \n" +
                "     },\n" +
                "\"1\": {\n" +
                "        \"PDate\": \"2019-02-25 00:00:00.0000000\",\n" +
                "        \"DDate\": \"2019-06-25 00:00:00.0000000\",\n" +
                "        \"Document\": \"FC\",\n" +
                "        \"Direction\": \"CALLE ....\"  \n" +
                "     }\n" +
                "}";



 Type type = new TypeToken<Map<String, Example>>(){}.getType();
 Map<String, Example> myMap = gson.fromJson(json, type);

 //Log.d("===", myMap.get("0").document);

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

Первый - создайте класс POJO / Model для преобразования вашего ответа.

public class SomeModel{

@SerializedName("name")
@Expose
private String name = null;

public String getName() {
return name;
}

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

}

Объявите свой ответ

 Gson gson = new Gson(); 
 SomeModelResponse response = gson.toJson(result, SomeModel.class);

Если вы будете использовать объект Gson более одного раза - лучше создать его синглтон, потому что каждый раз, когда вы создаете его новый экземпляр, он использует много памяти.

После добавления проверки:

    if(response !=null && response.getName() !=null){

    if(response.getName().equalIgnoreCase("some name")){
              // show toast Result Success !!! and move to next screen
     }
    else if(response.getName().equalIgnoreCase("another name")){
     // Invalid Response !!! your logic here
    }
 }

Также не забудьте проверить, какой ответ вы ожидаете получить. Это не должен быть Object.class

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...