Android 改进Json Expect数组和get对象的映射

Android 改进Json Expect数组和get对象的映射,android,json,retrofit,Android,Json,Retrofit,我有Json: { "data":[ "name": "name1", "surname": "surname1", "id": "22", "motivations": [] }, "1:"{ "name": "name2", "surname": "surname2", "id"

我有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);

}
助手类

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);

    }
publicstaticvoidgetperson(回调、上下文上下文、映射参数){
mContext=上下文;
ApiService ApiService=ApiClient.getClient().create(ApiService.class);
Map queryMap=getQueryMap(上次事件调用时间戳,参数);
Call Call=apiService.getPerson(queryMap);
call.enqueue(回调);
}
当我做出回应时,我的主要活动是:

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);
ApiHelper.getPerson(新回调(){ @凌驾 公共void onResponse(调用、响应){ List mlist=response.body(); } @凌驾 失败时公共无效(调用调用,可丢弃的t){ Log.i(标记“ERROR”+t.getMessage()); } },main活动。此,选项); 我请求的url是正确的,但我遇到了如下错误:

应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$


你的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
}

在“data”之后有一个左括号,用于标记数组的开始。但是在数组结束之前,有一个结束对象的结束的卷曲括号。有问题。

您的个人详细信息位于jsonarray数据下,而不是JSONObject是,我想将其映射到个人列表您可以拥有个人数据的arraylist。我建议在线使用json到pojo生成器。此外,还可以使用自定义转换器除去不需要的json包装器。检查这个,如果你的json响应是错误的,就让它proper@Bhavnik在我的问题中编辑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
}