我使用SpringBoot RestTemplate来消费REST API。响应体由数组的数组组成,每个嵌套数组都有一个键值对,如下所示:
[
["michael",0.9227975606918335],
["frank",0.888996958732605],
["christian",0.887883722782135]
]
当然,这种JSON结构并不理想,但是我不得不使用它。我想将这个响应反序列化为一个只有一个字段(二维数组)的Java对象。
API是这样调用的:
GetResponse response = restTemplate.getForObject(url, GetResponse.class);
Java类结构如下所示(全部用Lombok的@NoArgsConstructor、@AllArgsConstructor、@Getter、@Setter注释):
public class GetResponse {
@JsonProperty
private NamesArray[] data;
}
public class NamesArray {
@JsonProperty
private KeyValuePair[] data;
}
public class KeyValuePair {
@JsonProperty
private String key;
@JsonProperty
private float rating;
}
这应该可以工作,但是我一直收到这个错误:
org.springframework.web.client.RestClientException: Error while extracting response for type
[class com.mypackage.Client$GetResponse] and content type [application/json]; nested exception is
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot
deserialize value of type `com.mypackage.Client$GetResponse` from Array value (token `JsonToken.START_ARRAY`);
nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException:
Cannot deserialize value of type `com.mypackage.Client$GetResponsesponse` from Array value (token `JsonToken.START_ARRAY`)
知道所需的类结构是什么样子的吗?我是否在任何地方缺少Jackson注释?请注意,我确实得到了响应,所以问题显然是反序列化。谢谢。
您应该将您的响应映射到< code>KeyValuePair[]。class而不是< code>GetResponse.class并添加< code > @ JSON format(shape = JSON format。Shape.ARRAY)对KeyValuePair类的注释。
类似这样的事情应该会起作用:
键值对类:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@JsonFormat(shape= JsonFormat.Shape.ARRAY)
public static class KeyValuePair {
private String key;
private float rating;
}
答复:
KeyValuePair[] response = restTemplate.getForObject(url, KeyValuePair[].class);
问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…
我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为
问题内容: 在杰克逊的数据绑定的文档表明,杰克逊支持deserialising“所有支持类型的数组”,但我不能找出确切的语法这一点。 对于单个对象,我可以这样做: 现在,对于数组,我想这样做: 有人知道是否有不可思议的命令吗?如果没有,那么解决方案是什么? 问题答案: 首先创建一个映射器: 作为数组: 作为列表: 指定列表类型的另一种方法:
问题内容: 我有一些从Web服务返回的JSON数据。JSON是顶级数组: 使用make 可以对数组中包含的数据进行反序列化,但是,我无法让Serde对顶级数组进行反序列化。 我是否缺少某些内容,还是Serde不能对顶级数组进行反序列化? 问题答案: 您可以使用:
问题内容: 支持deserialising“所有支持类型的数组”,但我不能找出确切的语法这一点。 对于单个对象,我可以这样做: 现在,对于数组,我想这样做: 有人知道是否有不可思议的命令吗?如果没有,那么解决方案是什么? 问题答案: 首先创建一个映射器: 作为数组: 作为列表: 指定列表类型的另一种方法:
当我试图使用Gson库反序列化JSON对象数组时,我遇到了一个问题。 JSON数组的一个示例: 你怎么认为?反序列化这种JSON响应的正确Java代码是什么?