我正在尝试读取和解析Json文件;
JSONArray hops = (JSONArray) jsonObject.get("hops");
if (hops != null) {
Iterator<JSONObject> iterator = hops.iterator();
while (iterator.hasNext()) {
JSONObject itr = iterator.next();
rtt += (double) itr.get("rtt");
reply_ttl += (double) itr.get("reply_rtt");
probe_ttl += (long) itr.get("probe_ttl");
}
rtt = rtt / (hopCount * 2);
reply_ttl = (int) (reply_ttl / hopCount);
probe_ttl = (int) (probe_ttl / hopCount);
}
我可以正确rtt
,但NullPointerException
会返回reply_ttl
和probe_ttl
值。调试时我可以看到itr
包含文件所具有的所有属性;
{
"icmp_type": 11,
"probe_id": 1,
"icmp_q_ipl": 44,
"reply_tos": 192,
"reply_ipid": 9760,
"icmp_q_ttl": 1,
"rtt": 0.264,
"reply_size": 56,
"probe_size": 44,
"icmp_code": 0,
"icmp_q_tos": 0,
"addr": "193.1.31.125",
"probe_ttl": 1,
"reply_ttl": 255
}
但是当我查看itr
的HashMap值时,只有9个属性被放入表中。为什么所有Json节点都没有放入表中?
答案 0 :(得分:1)
看起来这里可能会出现错字:
reply_ttl += (double) itr.get("reply_rtt");
您正在检查密钥“reply_rtt”,但在底部的规范中,没有该名称的密钥。这是抛出异常的地方吗?
如果这不能解决您的问题,您是否可以为您的问题添加更多上下文?这是org.json库吗?查看找到“hops”对象的jsonObject
的内容并查看其他变量的声明方式会很有帮助。
关于缺失值,此JSON库可能不会将null值放入其内部HashMap中。因此,例如,如果您阅读字符串"{\"key\":null}"
,您可能只会得到一张空地图。