2016-12-28 2 views
0

У меня есть JSon:
дооснащение отображения Json Ожидать массив и получить объект

{ 
     "data":[ 
      "name": "name1", 
      "surname": "surname1", 
      "id": "22", 
      "motivations": [] 
     }, 
     "1:"{ 
      "name": "name2", 
      "surname": "surname2", 
      "id": "23", 
      "motivations": [] 
     }, 
     { 
      "name": "name3", 
      "surname": "surname3", 
      "id": "24", 
      "motivations": [] 
     }], 
     "sign": "9e46b7d6b140b", 
     "last_call": 1446 
    } 

Модели класс:

class Person{ 
     @DatabaseField 
     String name; 
     @DatabaseField 
     String surname; 
     @DatabaseField(id = true) 
     int id; 
     @DatabaseField(dataType = DataType.SERIALIZABLE) 
     List<Motivation> motivations 
    } 

public interface ApiService { 
    public static final String TEST_SIGN = "test_KP1FE3R1"; 
    @GET("api/person/{id}") 
    Call<JsonObject>getPerson(@Path("id") String id, @QueryMap Map<String, String> options); 

} 

API Client

public static Retrofit getClient() { 
     Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss") 
       .setLenient() .create(); 
     if (retrofit==null) { 
      retrofit = new Retrofit.Builder() 
        .baseUrl(BASE_URL) 
        .addConverterFactory(GsonConverterFactory.create(gson)) 
        .build(); 
     } 
     return retrofit; 
    } 

Helper класс

public static void getPerson(Callback<List<Person>> callback, Context context, Map<String,String> params){ 
     mContext=context; 
     ApiService apiService = ApiClient.getClient().create(ApiService.class); 
     Map<String,String> queryMap = getQueryMap(LAST_MUSEUM_EVENT_CALL_TIMESTAMP,params); 
     Call<List<Person>> call= apiService.getPerson(queryMap); 
     call.enqueue(callback); 

    } 

И мой главный ActivityPart, когда я делаю ответ:

ApiHelper.getPerson(new Callback<List<Person>>() { 
        @Override 
        public void onResponse(Call<List<Person>> call, Response<List<Person>> response) { 



         List<Person> mlist = response.body(); 


        } 
        @Override 
        public void onFailure(Call<List<Person>> call, Throwable t) { 
         Log.i(TAG,"ERROR"+ t.getMessage()); 
        } 
       },MainActivity.this,options); 

URL-адрес моего запроса является правильным, но Ive получил ошибку, как это:

Ожидаемое BEGIN_ARRAY но был BEGIN_OBJECT в строке 1 колонки 2 путь $

+0

данные вашего лица находятся под данными jsonarray не jsonobject – Raghunandan

+0

да и я хочу сопоставить его с перечнем лиц – Expiredmind

+0

, вы можете получить данные о персонале. Я предлагаю использовать json для генератора pojo онлайн. Также вы можете избавиться от нежелательной обертки json с помощью настраиваемого конвертера. проверьте этот https://github.com/nickbutcher/plaid/commit/4e338a5 – Raghunandan

ответ

0

Ваш ответ JSON неадекватен.

{ 
    "data":[ 
     "name": "name1", 
     "surname": "surname1", 
     "id": "22", 
     "motivations": [] 
    }, 
    "1:"{ 
     "name": "name2", 
     "surname": "surname2", 
     "id": "23", 
     "motivations": [] 
    }, 
    { 
     "name": "name3", 
     "surname": "surname3", 
     "id": "24", 
     "motivations": [] 
    }], 
    "sign": "9e46b7d6b140b", 
    "last_call": 1446 
} 

После «данных» у вас есть открывающая скобка, которая знаменует начало массива. Но до окончания массива yo имеет закрывающуюся фигурную скобку, которая заканчивает объект. Там что-то не так.