2014-11-23 2 views
0

я получить ответ JSON от сервера, и я хочу, чтобы преобразовать его в POJO, который заключается в следующем:Преобразовать JSON в POJO с помощью Gson: JsonSyntaxException

public class MeasureDataGetPOJO { 
    @SerializedName("CODE") 
    private String code = null; 

    @SerializedName("USER") 
    private User user = null; 

    public String getCode() { 
     return code; 
    } 

    public void setCode(String code) { 
     this.code = code; 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    public class User { 
     private List<MeasureData> measureDatas = null; 

     public List<MeasureData> getMeasureDatas() { 
      return measureDatas; 
     } 

     public void setMeasureDatas(List<MeasureData> measureDatas) { 
      this.measureDatas = measureDatas; 
     } 

     public class MeasureData { 

      @SerializedName("MT_TIME") 
      private String time = null; 

      @SerializedName("MT_VALUE") 
      private String value = null; 

      public String getTime() { 
       return time; 
      } 

      public void setTime(String time) { 
       this.time = time; 
      } 

      public String getValue() { 
       return value; 
      } 

      public void setValue(String value) { 
       this.value = value; 
      } 
     } 
    } 
} 

JSON я получаю от сервера:

{ 
"CODE":"012", 
"USER": 
    [ 
     { 
      "MT_TIME":"1412882760", 
      "MT_VALUE":"319", 
     } 
    ] 
} 

И ошибка я получаю от Gson является:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 10 

есть ли что-то не так с JSON или с POJO I попытаться отобразить JSON? Я ожидаю одного пользователя с несколькими парами MT_TIME и MT_VALUE.

Итак, я получаю код состояния и пользовательский объект. пользователь имеет массив пар MT_TIME и MT_VALUE. Позже, возможно, будет больше информации о пользователе в объекте пользователя.

Это просто догадка, но будет ли это правильным json?

{ 
"CODE":"012", 
"USER": 
{ 
    "MEASURE_DATA": 
    [ 
     { 
      "MT_TIME":"1412882760", 
      "MT_VALUE":"319" 
     } 
    ] 
} 

}

с дополнительным SerializedName здесь:

@SerializedName("MEASURE_DATA") 
private List<MeasureData> measureDatas = null; 
+0

Нет, второй JSON полностью недействителен. (Запустите его через [онлайн-парсер] (http://json.parser.online.fr/), чтобы узнать, почему.) (И перейдите на json.org, чтобы узнать синтаксис JSON.) –

+0

(«ПОЛЬЗОВАТЕЛЬ» - это массив, и как таковой обычно представлен списком. Только объект JSON отображает POJO без гимнастики.) –

+0

спасибо за подсказку @HotLicks, я исправил его. json - это не мое дело. мой партнер должен исправить это, потому что pojo должен быть таким. – Mulgard

ответ

2

Ожидается. Из того, что говорит ваш класс, JSON должен выглядеть следующим образом:

{ 
    "CODE": "012", 
    "USER": { 
     "MT_TIME": "1412882760", 
     "MT_VALUE": "319", 
    } 
} 

Но поле пользователя в формате JSON вы показали, что внутри массива.

Если это означает, что вы ожидаете, что список пользователей, а не только один пользователь, затем замените ваше поле в POJO на List<User>; в противном случае исправьте JSON.

+0

Нет, я не ожидаю нескольких пользователей. но я ожидаю несколько пар значений MT_TIME и MT_VALUE. – Mulgard

+0

по тому, как вы объяснили, невозможно вернуть сразу несколько серверов MT_TIME, MT_VALUE с сервера. – Mulgard

+0

Затем из вашего кода вы ожидаете «Список », правильно? Зачем так называете его «Пользователь»? – fge

0

Вам нужно список пользователей. Посмотрите, что после "USER": в вашей строке json есть [.

Это то, что говорит об ошибке:

Expected BEGIN_OBJECT but was BEGIN_ARRAY 
+0

Нет, я ожидаю только одного пользователя. но я ожидаю несколько пар MT_TIME и MT_VALUE. – Mulgard

+0

@Mulgard - Согласно первому JSON, «USER» состоит из массива из двух объектов. Поскольку для «ПОЛЬЗОВАТЕЛЯ» нет ничего другого, нет смысла иметь для этого объект. –

+0

делает это из-за правил разработки программного обеспечения. в будущем будет больше информации о пользователе. я думаю, я нашел решение, и я разместил его в своем оригинальном посте. – Mulgard

Смежные вопросы