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

使用jackson反序列化对象列表json对象-无法反序列化start\ U数组令牌外的实例

雍志文
2023-03-14

我正在与jackson一起阅读Mailchimp的Mandrill API返回的JSON响应。对于API响应来说,该响应有点非常规,因为它在方括号内包含把手——一个对象列表。围绕此错误的其他堆栈溢出讨论涉及不在列表中的API响应。

[
    {
        "email": "gideongrossman@gmail.com",
        "status": "sent",
        "_id": "6c6afbd3702f4fdea8de690c284f5898",
        "reject_reason": null
    }
]

我得到这个错误。。。

2019-07-06 22:41:47.916 DESKTOP-2AB6RK0 core.RestClient 131222 ERROR com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `core.user.MandrillWrapper$TemplatedEmailResponse` out of START_ARRAY token

定义此响应对象的正确方法是什么?

我尝试用以下类型定义响应。都没有奏效。

public static class TemplatedEmailResponse {
    public LinkedHashMap<String, String>[] response;
}




public static class TemplatedEmailResponse {
    public ArrayList<LinkedHashMap<String, String>> response;
}

@milchalk...如何准确地使用您的对象映射器建议与我目前调用API和处理响应的方式?

TemplatedEmailResponseList ret = getClient("messages/send-template.json").post(mandrillPayload,
            TemplatedEmailResponseList.class);

哪里

public <T> T post(Object payload, Class<T> responseType) {
    try {
        Entity<Object> entity = Entity.entity(payload, MediaType.APPLICATION_JSON);
        T t = client.target(url).request(MediaType.APPLICATION_JSON).post(entity, responseType);
        return t;
    } catch (Throwable t) {
        logError(t);
        throw t;
    } finally {
        client.close();
    }
}

共有1个答案

范修伟
2023-03-14

您可以直接将这个json反序列化到Pojo类的List。

给定模型类别:

public class TemplatedEmailResponse {
    private String email;
    private String status;
    private String _id;
    private String reject_reason;
    //getters setters
}

您可以使用列表的TypeReference反序列化此json

ObjectMapper mapper = new ObjectMapper();
TypeReference<List<TemplatedEmailResponse>> typeRef = new TypeReference<List<TemplatedEmailResponse>>() {};
List<TemplatedEmailResponse> list = mapper.readValue(json, typeRef);

其中json变量表示本例中的json字符串。

 类似资料:
  • 我目前正在开发一个Java web应用程序,它使用Magento REST API公开的JSON数据。api返回的数据示例如下: 我的应用程序中有一个Java类,如下所示: 我想对数据进行反序列化,并将其转换为,但我总是得到以下错误: 这是我用来将JSON响应反序列化为ArrayList的语句行: 有人能分享一些见解吗?我看到一些例子,返回的JSON对象前面没有任何ID。那是因为我做错了什么吗?非

  • 我有一个抽象的超类A,我有几个具体的子类B,C,D 在序列化方面,我执行以下操作: 没问题。我现在想反序列化这个。我知道我不能实例化一个抽象类,那么这是如何实现的呢? 这不起作用: 编辑:我把这个添加到我的抽象超类中:(仍然没有运气) 再次编辑:我现在遇到以下错误: 看看JSON,@class不在那里。我怎样才能做到?我试过: 但这并没有奏效。有这方面的例子吗?如何告诉对象映射器对类使用我的注释?

  • 我有以下JSON文件要反序列化

  • 当我试图解析以前用Jackson生成的一些JSON时,我得到了这个错误。我像这样生成JSON 其中Message.getPayload()是一个HashMap,在这个实例中包含两个字符串和一个各种对象的列表。这将创建以下格式错误的JSON

  • 我需要一个自定义反序列化器来在复杂的POJO中转换字符串。反序列化工作直到使用反序列化器:特别是使用自定义反序列化器时,我的对象的非对象属性不会序列化。 我有一个restful Web服务,它有一个pojo作为参数。 所以我的类PreentivoWs需要一个方法。这里是类定义: 在jsonObject中,我有一个枚举定义为 但此对象需要转换反序列化程序: 并在财产上标注: fromString方法

  • 我有这样一个实体: 和相关的JSON: 我试图在Spring MVC@Controller中以如下方式对其进行反序列化: 添加