【发布时间】:2015-01-24 00:33:11
【问题描述】:
我一直在与 Jackson 合作反序列化数据。总的来说,这是一个顺利的过程。
让我感到困惑的是,当 JSON 属性缺少名称时,试图将具有已知数量对象的东西反序列化为自定义类。
总的来说,我正在反序列化 objectId:fullObject 的映射
{
"1411842351335": {"vers": [], "name": "Basic (and reversed card)", "tags": [], "did": 1, "usn": -1, "req": [[0, "all", [0]], [1, "all", [1]]], "flds": [{"size": 20, "name": "Front", "media": [], "rtl": false, "ord": 0, "font": "Arial", "sticky": false}, {"size": 20, "name": "Back", "media": [], "rtl": false, "ord": 1, "font": "Arial", "sticky": false}], "sortf": 0, "latexPre": "\\documentclass[12pt]{article}\n\\special{papersize=3in,5in}\n\\usepackage[utf8]{inputenc}\n\\usepackage{amssymb,amsmath}\n\\pagestyle{empty}\n\\setlength{\\parindent}{0in}\n\\begin{document}\n", "tmpls": [{"afmt": "{{FrontSide}}\n\n<hr id=answer>\n\n{{Back}}", "name": "Card 1", "qfmt": "{{Front}}", "did": null, "ord": 0, "bafmt": "", "bqfmt": ""}, {"afmt": "{{FrontSide}}\n\n<hr id=answer>\n\n{{Front}}", "name": "Card 2", "qfmt": "{{Back}}", "did": null, "ord": 1, "bafmt": "", "bqfmt": ""}], "latexPost": "\\end{document}", "type": 0, "id": "1411842351335", "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n", "mod": 1411842351}}
每个对象都被映射到一个class,其一般结构如下:
public class AnkiNoteType {
...
private List<AnkiNoteTypeReq> req;
...
}
有问题的对象
package com.openwebsrs.libanki.entities;
public class AnkiNoteTypeReq {
...
private Integer a;
private String b;
private List<Integer> c;
...
}
我在这里和其他情况下遇到的问题是将没有名称的对象列表(即没有“名称:值”,只有“值”)映射到指定的类。
"req": [[0, "all", [0]], [1, "all", [1]]]
我一直在做的事情可以在here in implementation 看到,重要的部分如下:
@Override
public List<AnkiNoteType> getAnkiNoteTypes(String noteTypesString) throws IOException {
Map<Long, AnkiNoteType> noteTypeMap = objectMapper.readValue(noteTypesString, new TypeReference<Map<Long, AnkiNoteType>>() {
});
return new ArrayList(noteTypeMap.values());
}
我不需要完整的解决方案。我只需要走上正轨。
感谢您的宝贵时间!
【问题讨论】:
-
你对json的格式有任何控制吗?如果是这样,我强烈建议您选择将“req”表示为对象数组而不是数组数组(实际上是对象)。这不仅可以解决您当前的问题,还可以解决您将来可能遇到的任何问题,如果此 json 表示扩展为使字段不明确。
-
不幸的是,没有。数据直接从另一个应用程序的数据库中提取 (ankisrs.net)。不过欣赏这个想法!
标签: java json jackson deserialization