【发布时间】:2018-05-24 15:56:42
【问题描述】:
我的 JSON 字符串:
{ "categorySetName": "TSN", “行”:[ { “日期”:201750, “排名1”:{ "标签": "\uBC30\uACBD", "search_keyword": "\uBC30\uACBD", “频率”:3975, “得分”:69.27185 }, “排名2”:{ "标签": "\uBC30\uACBD\uD654\uBA74", "search_keyword": "\uBC30\uACBD\uD654\uBA74", “频率”:3736, “得分”:109.83768 }, “排名3”:{ "标签": "\uC544\uC774\uD3F0x", "search_keyword": "\uC544\uC774\uD3F0x", “频率”:3382, “得分”:62.057728 }, . . . . “排名500”:{ "标签": "\uC544\uC774\uD3F0x", "search_keyword": "\uC544\uC774\uD3F0x", “频率”:1572, “得分”:68.057728 } } }
我的 Deserializer.Java
@SuppressWarnings("serial")
public class AssociationTopRowDeserializer extends StdDeserializer<AssociationTopRow> {
public static final String DATE = "date";
public static final List<String> knownFieldNames = Arrays.asList(DATE);
public AssociationTopRowDeserializer() {
this(null);
}
public AssociationTopRowDeserializer(Class<AssociationTopRow> c) {
super(c);
}
@Override
@SuppressWarnings("unchecked")
public AssociationTopRow deserialize(JsonParser jsonParser, DeserializationContext desContext) throws IOException {
AssociationTopRow row = new AssociationTopRow();
JsonNode jsonNode = jsonParser.getCodec().readTree(jsonParser);
ObjectMapper objectMapper = new ObjectMapper();
row.setDate(jsonNode.get(DATE).asText());
String unknownField = getUnknownField(jsonNode.fieldNames());
if (unknownField != null) {
Map<String, AssociationTopRowDetail> map = new HashMap<String, AssociationTopRowDetail>();
map.put(unknownField, (AssociationTopRowDetail) objectMapper.convertValue(jsonNode.get(unknownField),
AssociationTopRowDetail.class));
row.setTransMap(map);
}
return row;
}
public String getUnknownField(Iterator<String> fieldNames) {
while (fieldNames.hasNext()) {
String next = fieldNames.next();
if (!knownFieldNames.contains(next))
return next;
}
return null;
}
}
这仅显示有关“rank1”的信息
【问题讨论】:
-
使用自定义
JsonDeserializer有什么需要?