我有一个高度嵌套的api响应:
{
"dataRequests": [
{
"status": "success",
"title": "token",
"values": {
"limit": 1,
"offset": 0,
"count": 1,
"total": 1,
"elements": [
{
"type": "DOMAIN",
"permission": "default",
"properties": [
{
"name": "property:id",
"value": 390
},
{
"name": "setting:crawler:token",
"value": "here's a token"
}
],
"filters": []
}
]
}
}
]
}
我试图通过使用许多包装来解析它。因为当我想获得带令牌的字段'value'时,它只从一个dataRequest dto返回'null'。
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize
instance of java.util.LinkedHashMap out of START_ARRAY token
at [Source: {"dataRequests":[{"status":"success","title":"token","values":
{"limit":1,"offset":0,"count":1,"total":1,"elements":
[{"type":"DOMAIN","permission":"default","properties":[{"name":"property:id","value":390},
{"name":"setting:crawler:token","value":"here's a token"}],"filters":[]}]}}]}; line: 1, column:
17] (through reference chain: com.rest.dto.ProjectTokenDto["dataRequests"])
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProjectTokenDto {
private Map<String, ValuesDto> dataRequests;
}
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ValuesDto {
private Map<String, List<ElementsDto>> values;
}
元素DTO:
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ElementsDto {
private Map<String, List<PropertiesDto>> elements;
}
属性DTO:
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class PropertiesDto {
private String name;
private String value;
}
然后我试着用不是最好的方式解析这棵树,但是我无法理解如何更容易地解析它?并获取上面的异常:
ProjectTokenDto wrapper = graphQLSteps.postProjectToken(id);
Map<String, ValuesDto> values = wrapper.getDataRequests();
Map<String, List<ElementsDto>> elements = new HashMap<>();
Map<String, List<PropertiesDto>> properties = new HashMap<>();
for (Map.Entry<String, ValuesDto> entry : values.entrySet()) {
if (entry.getKey().equals("values")) {
elements.put(entry.getKey(), (List<ElementsDto>) entry.getValue().getValues());
}
}
for (Map.Entry<String, List<ElementsDto>> entry : elements.entrySet()) {
if (entry.getKey().equals("elements")) {
properties.put(entry.getKey(), (List<PropertiesDto>) entry.getValue().get(0).getElements());
}
}
for (Map.Entry<String, List<PropertiesDto>> entry : properties.entrySet()) {
if (!entry.getValue().get(0).getValue().equals(Long.toString(id))) {
token = entry.getValue().get(0).getValue();
}
}
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_NUMBER_INT token
at [Source: {"dataRequests":[{"status":"success","title":"token","values":{"limit":1,"offset":0,"count":1,"total":1,"elements":[{"type":"DOMAIN","permission":"default","properties":[{"name":"property:id","value":390},{"name":"setting:crawler:token","value":"here's a token"}],"filters":[]}]}}]}; line: 1, column: 72] (through reference chain: com.rest.dto.ProjectTokenDto["dataRequests"]->java.util.ArrayList[0]->com.rest.dto.ValuesDto["values"]->java.util.LinkedHashMap["limit"])
试图通过将JsonIgnoreProperties更改为
@JsonIgnoreProperties({"limit", "offset", "count", "total", "status", "title"})
在valuesDto中,但最终具有相同的异常
我通过更改DTO的值来修复它:
ProjectTokendto:
private List<DataRequestDto> dataRequests;
DataRequestSDTo:
private ValuesDto values;
private List<ElementsDto> elements;
private List<PropertiesDto> properties;
最后是PropertiesDTO:
private String name;
private String value;
下面提到的是JSON字符串ResultString: 我想将相同的内容转换为A类的对象: B类代码为: 但是获取异常: JSONMappingException:无法从START_ARRAY标记反序列化java.util.LinkedHashMap实例
但是我得到了这个错误: “无法读取文档:无法反序列化com.advice.domain.family.income实例,从[source:java.io.pushbackInputStream@3d3298f9;行:1,列:2]处的START_ARRAY令牌中取出(通过引用链:java.util.ArrayList[0]);嵌套异常是com.fasterxml.jackson.databind.j
给定以下JSON文件: 我试图使用Jackson对象映射器访问JSON文件中的值。具体如下:
商店、地址和鞋的结构是:(我省略了getters和setters): 我已经在这里和谷歌上看过了,但仍然不知道我在这一点上错过了什么。 任何回应都将大有帮助。
问题内容: 我正在使用来自外部合作伙伴的API。不幸的是,返回的响应似乎没有固定的结构。理想情况下,API合同意味着它不会被违反,但是这种情况一直在发生。 无论如何,所以发生的事情是JSON响应中的字段主要是一个地图,但有时却是一个列表。 例如,假设以下是我通常得到的响应: 但是在极少数情况下,我会得到列表,而不是地图或其他违反合同的情况。 例如: 我正在使用杰克逊将此响应映射到POJO。在某些情