java – Jackson – 泛型getValue方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Jackson – 泛型getValue方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2655字,纯文字阅读大概需要4分钟。
内容图文
![java – Jackson – 泛型getValue方法](/upload/InfoBanner/zyjiaocheng/820/020e9cced28c4b8e932564ad3544d079.jpg)
Jackson中的ValueNode的所有子类(JSON库)具有用于获取基础值对象的不同方法,例如IntNode有getIntValue,BooleanNode有getBooleanValue等等.
为什么没有调用简单的getValue的泛型/多态方法只返回一个Object,并且该Object是Integer或Boolean等,根据调用该方法的节点类型?
或者……实际上有这样的方法吗?
我需要这样的方法用于我的目的但似乎图书馆设计师没有发现添加这样的方法会有用.或者……出于某种原因,该方法是否故意丢失?
我的目的:在下面的代码中,我遍历树并生成仅由HashMap,Object []和Java基本类型(如Integer,Boolean等)组成的结构.如果我有这样的方法,而不是所有这些if-else if-else if块,我将只有一个方法调用(在JsonNode是叶节点即ValueNode的子类型的情况下).但是我似乎没有杰克逊这样的方法.所以我必须编写所有那些丑陋的if-else if-else if blocks.
码:
@SuppressWarnings({ "rawtypes", "unchecked" })
private static Object traverse(JsonNode nd) {
if (nd instanceof ObjectNode) {
ObjectNode ndd = (ObjectNode) nd;
HashMap mp = new HashMap();
Iterator<String> it = ndd.getFieldNames();
while (it.hasNext()) {
String s = it.next();
mp.put(s, traverse(ndd.get(s)));
}
return mp;
} else if (nd instanceof ArrayNode) {
ArrayNode ndd = (ArrayNode) nd;
Object[] arr = new Object[ndd.size()];
for (int i = 0; i < ndd.size(); i++) {
arr[i] = traverse(ndd.get(i));
}
return arr;
} else if (nd instanceof NullNode) {
// NullNode ndd = (NullNode)nd;
return null;
} else if (nd instanceof BooleanNode) {
BooleanNode ndd = (BooleanNode) nd;
return ndd.getBooleanValue();
} else if (nd instanceof IntNode) {
IntNode ndd = (IntNode) nd;
return ndd.getIntValue();
} else if (nd instanceof LongNode) {
LongNode ndd = (LongNode) nd;
return ndd.getLongValue();
} else if (nd instanceof DoubleNode) {
DoubleNode ndd = (DoubleNode) nd;
return ndd.getDoubleValue();
} else if (nd instanceof DecimalNode) {
DecimalNode ndd = (DecimalNode) nd;
return ndd.getDecimalValue();
} else if (nd instanceof BigIntegerNode) {
BigIntegerNode ndd = (BigIntegerNode) nd;
return ndd.getBigIntegerValue();
} else if (nd instanceof TextNode) {
TextNode ndd = (TextNode) nd;
return ndd.getTextValue();
}
throw new IllegalStateException("Failed while traversing the JSON tree at node: ||| " + nd.asText() + " |||");
}
解决方法:
因为你要返回一个Object,你可以使用这样的东西
ObjectMapper mapper = new ObjectMapper();
return mapper.convertValue(nd,Object.class);
对于这个特定的测试用例,它有效
JsonNode nodeBool = BooleanNode.TRUE;
Object objectBool = mapper.convertValue(nodeBool,Object.class);
Boolean returnValBool = (Boolean) objectBool;
System.err.println(returnValBool);
JsonNode nodeDouble = new DoubleNode(3.4);
Object objectDouble = mapper.convertValue(nodeDouble,Object.class);
Double returnValDouble = (Double) objectDouble;
System.err.println(returnValDouble);
它按预期结束:
true
3.4
内容总结
以上是互联网集市为您收集整理的java – Jackson – 泛型getValue方法全部内容,希望文章能够帮你解决java – Jackson – 泛型getValue方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。