[英]decoding Jackson Tree Model
DATA1 = {"metrics": {"code1": 0, "code2" : 100} }
DATA2 = {"metrics": {"code1": [10,20,30]}}
CODE
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(m);
JsonNode metric_node = rootNode.path("metrics");
Iterator iterator = metric_node.getFields();
while (iterator.hasNext()) {
logger.info("class_name=> {}", iterator.next().getClass().getName());
logger.info("content=> {}", iterator.next());
}
OUTPUT (for DATA1)
class_name=> java.util.LinkedHashMap$Entry
content=> code1=0
class_name=> java.util.LinkedHashMap$Entry
content=> code2=100
Don't know about DATA2
我无法通过哈希映射进行迭代。我尝试了iterator.next()。getKey()等,但无法正常工作。 我如何
您仅在访问的JsonNode的外键上进行迭代。 并且由于您要打印出实际类的名称,所以这就是为什么要获取有关LinkedHashMap$Entry
的记录输出的原因。 看一下metric_node.getFields();
的返回类型metric_node.getFields();
Iterator<Map.Entry<String, JsonNode>> iterator = metric_node.fields();
您实际上是在该级别上遍历每个节点。 但是,由于您两次调用iterator.next()
,因此您同时按下了两个键,并且循环终止了。 如果您尝试在DATA2上运行此代码,则会得到NoSuchElementException
因为您要迭代的项目超出了迭代器实际知道的范围。
因此,您实际上并没有查看与这些键关联的任何值。 如果更改循环处理JsonNodes
您将看到每个字段上的键/值。 如果您有要通过的嵌套对象,则需要遍历每个JsonNode
JsonNode rootNode = mapper.readTree(DATA1);
JsonNode metric_node = rootNode.path("metrics");
Iterator<Map.Entry<String, JsonNode>> iterator = metric_node.fields();
while (iterator.hasNext()) {
Map.Entry<String, JsonNode> next = iterator.next();
System.out.println("class_name=> = " + next.getKey());
System.out.println("content=> = " + next.getValue());
System.out.println();
}
输出:
class_name=> = code1
content=> = 0
class_name=> = code2
content=> = 100
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.