Чтение Json из Gson приводит к ошибке - PullRequest
0 голосов
/ 06 сентября 2011

Я пытаюсь разобрать простую строку Json, используя Gson.

String json = "{'FoodMenuRS':{'Status':'Success','TotalResults':4}}";

Для чтения JSON я пишу код:

Info info = gson.fromJson(json, Info.class);

а здесь информация

public class Info {
@SerializedName("FoodMenuRS")
public String FoodMenuRS;

@SerializedName("Status")
public String Status;

@SerializedName("TotalResults")
public String TotalResults;

public String getFoodMenuRS() {
    return FoodMenuRS;
}

public void setFoodMenuRS(String foodMenuRS) {
    FoodMenuRS = foodMenuRS;
}

public String getStatus() {
    return Status;
}

public void setStatus(String status) {
    Status = status;
}

public String getTotalResults() {
    return TotalResults;
}

public void setTotalResults(String totalResults) {
    TotalResults = totalResults;
}
}

Но при разборе исключение происходит:

The JsonDeserializer StringTypeAdapter failed to deserialize json object {"Status":"Success","TotalResults":4} 

И если я удалю «FoodMenuRs», он будет работать правильно. Пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

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

Ваш Info класс имеет A FoodMenuRS, Status и TotalResults, но ваш json рассказывает другую историю. Казалось бы, ваш json ищет объект с именем «FoodMenuRS», который имеет два поля с именами Status и TotalResults. Кажется, моя логика подтверждается тем фактом, что он работает, когда вы удаляете FoodMenuRS. Это помогает?

0 голосов
/ 10 февраля 2014

Вероятно, это происходит, когда вы неправильно установили @RequestBody в контроллере, который получает данные от клиента. Вы видите, когда адаптер JSON не знает запрос.

Надеюсь, что это будет

С уважением:)

0 голосов
/ 07 февраля 2012

Используя следующий код, я могу получить ответ.

 public static void main(String[] args) {
            // TODO Auto-generated method stub
            String json = "{'FoodMenuRS':'ABC','Status':'Success','TotalResults':4}";
            Gson gson = new Gson();
            Info info = gson.fromJson(json, Info.class); 
            System.out.println(info.toString());

        }


public class Info { 
    @SerializedName("FoodMenuRS") 
    public String FoodMenuRS;  
    @SerializedName("Status") 
    public String Status;  
    @SerializedName("TotalResults") 
    **public int TotalResults;**
    /**
     * @return the foodMenuRS
     */
    public String getFoodMenuRS() {
        return FoodMenuRS;
    }
    /**
     * @param foodMenuRS the foodMenuRS to set
     */
    public void setFoodMenuRS(String foodMenuRS) {
        FoodMenuRS = foodMenuRS;
    }
    /**
     * @return the status
     */
    public String getStatus() {
        return Status;
    }
    /**
     * @param status the status to set
     */
    public void setStatus(String status) {
        Status = status;
    }
    /**
     * @return the totalResults
     */
    public int getTotalResults() {
        return TotalResults;
    }
    /**
     * @param totalResults the totalResults to set
     */
    public void setTotalResults(int totalResults) {
        TotalResults = totalResults;
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Info [FoodMenuRS=" + this.FoodMenuRS + ", Status=" + this.Status
                + ", TotalResults=" + this.TotalResults + "]";
    }
} 

Вы можете использовать int или String для TotalResults, это даст правильный результат.

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