我正在解析一个从Mongo DB中提取的JSONObject。根据文档,数值映射到java.lang.number对象,但是,当我尝试进行以下声明时,特别是在第一个System.out.println(value.floatVlaue())
中,我收到错误。
//For data
int counter = 0;
float score = 0;
Number value = 0;
while(cur.hasNext()){
JSONObject jsonObj = (JSONObject) JSONValue.parse(cur.next().toString());
metricsIterator = ((JSONObject)((JSONObject)((JSONObject)((JSONObject)jsonObj.get("level_1")).get("level_2")).get("level_3")).get("metrics")).keySet().iterator();
while(metricsIterator.hasNext()){
System.out.println(metricsIterator.next().toString());
value = (Number) jsonObj.get(metricsIterator.next());
System.out.println(value.floatValue());
System.out.println(value.toString());
someLogic(value.doubleValue(), ((Number)jsonObj.get("long")).intValue(), start, end, days);
}
}
我认为问题行肯定来自value = (Number) jsonObj.get(metrics Iterator.next())
Json im解析看起来像这样
{ "_id" : "9223370663181869423_cnn_1" ,
"long" : 1373672925000 ,
"level_1" :
{ "level_2" :
{ "level_3level" :
{ "metrics" :
{"key1" : 0.003333333333333334 ,
"key2" : 0.005833333333333334 ,
"key3" : 0.005833333333333334 ,
"key4" : 0.009166666666666667 ,
"key5" : 0.1391666666666667 ,
"key6" : 0.1241666666666667 ,
"key7" : 0.01666666666666667
}
}
}
}
}
非常感谢任何帮助!
答案 0 :(得分:1)
迭代器只能遍历一次。这意味着,一旦您metricsIterator.next()
System.out.println(metricsIterator.next().toString());
.next()
,您最终会消耗该价值,当您在value = (Number) jsonObj.get(metricsIterator.next());
中再次致电{{1}}时,您会获得该值之后的价值期待,换句话说,你跳过一个值。
因此,当您点击最后一个值时,下一个值为null,这将导致空指针。
尝试在赋值之前删除sysout,它应该解决nullpointer。
答案 1 :(得分:0)
你正在做两倍的metricsIterator.next()
首先:System.out.println(metricsIterator.next()。toString()); second:value =(Number)jsonObj.get(metricsIterator.next());
然后你到底而不检查hasNext()