String str = "{\"data\":{\"birth_day\":7,\"birth_month\":6},\"errcode\":0,\"msg\":\"ok\",\"ret\":0}";
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(str);
for (int i = 0; i < root.size() ; i++) {
System.out.println(root.get(i));
}
for (Iterator<?> iter = root.fieldNames();iter.hasNext();){
System.out.println(iter.next());
输出结果:
// null
// null
// null
// null
// data
// errcode
// msg
// ret
为什么前面输出的结果都是Null?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您提供的Java代码片段中,使用了Jackson库的ObjectMapper
来解析JSON字符串,并通过readTree
方法得到一个JsonNode
对象。之后,您尝试遍历这个JsonNode
对象的字段名称。但是,在进入循环体之前,您错误地放置了一个未闭合的for循环头,这导致了代码逻辑上的误解。
实际上,您的代码中多了一个没有正确配对的for循环初始化和条件判断部分,这使得循环在真正开始遍历root.fieldNames()
之前就尝试打印了四次null
(每次迭代尝试访问并打印一个不存在的元素)。正确的循环结构应该如下所示:
String str = "{\"data\":{\"birth_day\":7,\"birth_month\":6},\"errcode\":0,\"msg\":\"ok\",\"ret\":0}";
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(str);
Iterator<String> iter = root.fieldNames();
while(iter.hasNext()){
System.out.println(iter.next());
}
在这个修正后的版本中,我移除了错误的for循环语法,直接使用了while
循环来遍历root.fieldNames()
返回的迭代器。这样,程序将正确地输出JSON对象的所有字段名,即"data", "errcode", "msg", 和 "ret",而不会先输出任何null
值。