
我可以建议您像这样使用JsonNode:
class Event { @JsonProperty("channel") private JsonNode channelInternal; private Channel channel; private String channelStr; public Channel getChannel() { if (channel == null && channelInternal != null) { if (channelInternal.isObject()) { int id = channelInternal.get("id").intValue(); String name = channelInternal.get("name").asText(); channel = new Channel(id, name); } } return channel; } public String getChannelStr() { if (channelStr == null && channelInternal != null) { if (channelInternal.isTextual()) { channelStr = channelInternal.asText(); } } return channelStr; }}或像这样 :
class Event { private Channel channel; private String channelStr; @JsonSetter("channel") public void setChannelInternal(JsonNode channelInternal) { if (channelInternal != null) { if (channelInternal.isTextual()) { channelStr = channelInternal.asText(); } else if (channelInternal.isObject()) { int id = channelInternal.get("id").intValue(); String name = channelInternal.get("name").asText(); channel = new Channel(id, name); } } } public Channel getChannel() { return channel; } public String getChannelStr() { return channelStr; }}但是我认为使用自定义解串器更为常见。
这是测试代码
public static void main(String[] args) throws IOException { ObjectMapper objectMapper = new ObjectMapper(); String source1 = "{n" + " "channel" : "JHBHS"n" + "}"; String source2 = "{n" + " "channel": {n" + " "id": 12321,n" + " "name": "Some channel"n" + " }n" + "}"; //Test object parsing Event result = objectMapper.readValue(source2, Event.class); System.out.println(String.format("%s : %s", result.getChannel().getId(), result.getChannel().getName())); //Test string parsing result = objectMapper.readValue(source1, Event.class); System.out.println(result.getChannelStr());}并输出:
12321 : Some channelJHBHS
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)