java - 将格式错误的 JSON 列表解析为对象:使用 Java 解析的最佳实践
问题描述
因此,我使用来自格式错误的 REST 端点(我无权访问)的数据。
特别是,我收到一个实际上是一个列表的 json 对象。处理这个问题的最佳方法是什么?杰克逊能做到吗?
{
"list": {
"element 31012991428": {
"objId": 31012991428,
"color": "green"
},
"element 31012991444": {
"objId": 31012991444,
"color": "orange"
},
"element 3101298983": {
"objId": 3101298983,
"color": "red"
},
}
}
理想情况下,我希望能够按如下方式解析它:
响应.java
public class GetSucherResponse {
@JsonProperty("elements") //what goes here?
private List<Element> elements;
}
元素.java
public class Element {
@JsonProperty("objId")
private Long objId;
@JsonProperty("color")
private String color;
}
解决方案
创建了一个粗略的解决方案
响应类应该如下所示:
@JsonDeserialize(using = ResponseDeserializer.class)
public class Response {
private List<Element> elements;
public Response(List<Element> elements) {
this.elements = elements;
}
}
解串器:
public class ResponseDeserializer extends StdDeserializer<Response> {
protected ResponseDeserializer() {
super(Response.class);
}
@Override
public Response deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
TreeNode rootNode = jsonParser.getCodec().readTree(jsonParser);
TreeNode listNode = rootNode.get("list");
List<Element> elements = new ArrayList<>(listNode.size());
listNode.fieldNames().forEachRemaining(
s -> elements.add(parseElement(jsonParser, listNode.get(s)))
);
return new Response(elements);
}
private Element parseElement(JsonParser jsonParser, TreeNode subNode) {
Element element = null;
try {
element = jsonParser.getCodec().treeToValue(subNode, Element.class);
} catch (JsonProcessingException e) {
e.printStackTrace(); //TODO handle it in a better way
}
return element;
}
}
推荐阅读
- xml - 在 Oracle 11g 中,如果 XML 文档中没有嵌套标记,则不会在结果集中选择父标记值
- java - 将 MPAndroidChart 图表保存到图像而不在活动上显示
- dictionary - 我希望从 Teradata Assistant 中的视图中创建列的数据字典
- firebase - 允许未经身份验证的用户写入但不读取任何其他孩子
- c - 结合常量后缀和可移植数据类型
- angular - 为什么组件在角度 6 的路由中相互堆叠?
- hive - 为什么 Hive 在预期的某些情况下不使用 MapReduce?
- javascript - rCharts - 隐藏所有系列,除了图例中选定的系列
- dialogflow-es - 为什么 Dialogflow 两次询问相同的后续意图?
- api - 使用 api 管理配置服务结构 api 时出错