JsonObject没有正确填充表格

时间:2016-06-27 17:48:35

标签: java json parsing

我正在尝试读取和解析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_ttlprobe_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节点都没有放入表中?

1 个答案:

答案 0 :(得分:1)

看起来这里可能会出现错字:

reply_ttl += (double) itr.get("reply_rtt");

您正在检查密钥“reply_rtt”,但在底部的规范中,没有该名称的密钥。这是抛出异常的地方吗?

如果这不能解决您的问题,您是否可以为您的问题添加更多上下文?这是org.json库吗?查看找到“hops”对象的jsonObject的内容并查看其他变量的声明方式会很有帮助。

关于缺失值,此JSON库可能不会将null值放入其内部HashMap中。因此,例如,如果您阅读字符串"{\"key\":null}",您可能只会得到一张空地图。