当前位置: 首页 > 知识库问答 >
问题:

翻新2预期为BEGIN_OBJECT,但为BEGIN_ARRAY

丌官承
2023-03-14

我有一个JSON对象,如下所示:

[[{
    "customers_id": 0
    "name": "John Doe",
    "address": "1234 Merry Way",
    "city": "Miami",
    "zipcode": "55443",
    "state": "Florida"
}, {
    "customers_id": 1
    "name": "John Doe",
    "address": "1234 Merry Way",
    "city": "Miami",
    "state": "Florida"
}, {
    "customers_id": 2
    "name": "John Doe",
    "address": "1234 Merry Way",
    "city": "Miami",
    "state": "Florida"
}],[]
@POST("search_clients.php")
Call<List<Course>> GetClients();
Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .build();

ClientLookup clientLookup = retrofit.create(ClientLookup.class);

Call<List<Client>> clients = clientLookup.GetClients();
clients.enqueue(new Callback<List<Client>>() {
    @Override
    public void onResponse(Response<List<Client>> response) {
        if (!response.isSuccess()) {
            Log.e(TAG, "No Success: " + response.message());
             return;
        }

        Log.d(TAG, response.body().toString());
    }

    @Override
    public void onFailure(Throwable t) {
        Log.e(TAG, "Failure: " + t.getMessage());
    }
});
public class Client {
  private int customers_id;
  private String name;
  private String address;
  private String city;
  private String zipcode;
  private String state;
}
public final class ClientCleaner extends Converter.Factory {
    private static final String TAG = ClientCleaner.class.getName();

    @Override
    public Converter<ResponseBody, Client> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        return new Converter<ResponseBody, Client>() {
            @Override
            public Client convert(ResponseBody body) throws IOException {
                String returnValue = body.string();
                if (returnValue.startsWith("[")){
                    returnValue = returnValue.substring(1);
                }
                if (returnValue.endsWith(",[]]")){
                    returnValue = returnValue.substring(0, returnValue.length() - 4);
                }
                Log.d(TAG, returnValue);
                Gson gson = new Gson();
                return gson.fromJson(returnValue, Client.class);
            }
        };
    }


}

共有1个答案

谷梁晟
2023-03-14

列表的反序列化不正确。请参考这个关于如何用GSON反序列化对象列表的问题。

这应该足够了:

List<Client> videos = gson.fromJson(returnValue, new TypeToken<List<Client>>(){}.getType());
 类似资料:
  • 问题内容: 我在列表中仅收到一个项目时收到此错误。我在服务器端REST Web服务中使用Jersey,当List返回一个元素并且当我得到它时,我仅收到错误,但是当它包含多个元素时,它可以正常工作,这就是我的工作方式它: 为什么Jersey不发送包含一个项目的列表?这是球衣的虫子吗?有没有办法使它始终序列化为数组? 当Web服务返回0元素时,这是我的JSON数据: 当Web服务返回1元素时,这是我的

  • 我试图使用gson解析下面的json字符串,并且我得到了这个异常。 异常很明显,它期待一个对象(可能是Datapoint),但它遇到了一个数组。我确信是我的模型类导致了这个问题,但是我不明白我的模型类应该是什么样子才能解析json而不会失败。

  • 问题内容: 我在尝试将JSON解组到对象中时遇到GSON错误。错误( 应为BEGIN_OBJECT,但在第3行第22列处为STRING )指向下面输入的第3行。 我是否相对于Bean正确映射了JSON? 我输入的JSON看起来是这样的: 问题答案: 不,您没有正确映射它,因为您的json对象不是,它包含。 你可以创建一个类只是为了封装你,但它是清洁反序列化容器的使用 然后使用解析有趣的内容 并且我

  • apiclient.kt:- } apiInterface.kt:- } myactivity.kt:-

  • 问题内容: 我遇到错误了。 由于以下原因,无法解析JSON:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第2列为BEGIN_OBJECT 服务器网址 执行请求 上课后 我该如何解决? 问题答案: 您在注释中声明返回的JSON是这样的: 您告诉Gson您有一个对象数组: