为什么JSONObject的put方法抛出JSONException?
我在这里找到了一些关于如何处理这个异常的答案,但是没有解释为什么会首先发生这种情况。我有以下代码:为什么JSONObject的put方法抛出JSONException?
for (Map.Entry<String, Double> entry: qosMap.entrySet()) {
JSONObject qosEntry = new JSONObject();
try {
qosEntry.put(entry.getKey(), entry.getValue());
} catch (JSONException ex) {
Logger.getLogger(JSONUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
的qosMap将永远是空的,在这个地图中的数据始终有效。
什么情况下会抛出异常?为什么我需要这个额外的代码?
假设你正在使用JSONObject
从org.json
org.json.JSONObject.put(String, double) : JSONObject
它把一个键/ 双对中的JSONObject。
参数:
按键:一键串。 value:A double这是值。
返回:this
抛出:
JSONException如果关键是null或者号码无效。
我知道这个数据总是 有效。为什么我需要有这个额外的代码?
你可以让方法抛出异常,因为你不喜欢混乱你的代码,也似乎你不能通过捕获异常做任何有用的事情。
很明显,您知道您传递的数据是有效的。然而图书馆不会知道。这就是为什么它抛出一个检查的异常,只是为了让你知道它的失败。
是的,但这是我的问题点,我知道数据总是有效的。为什么我需要有这个额外的代码? – Andrei
检查Java文档
“如果值是一个非有限数,如果一个名称是重复的。”
https://docs.oracle.com/middleware/maf222/mobile/api-ref/oracle/adfmf/json/JSONObject.html
对于所有类型T,JSONObject.put(String键,T值)抛出一个JSONException当键为空或值是一个非限定#。对于double类型,如果double值无效,则也会引发JSONException。 见:
https://docs.oracle.com/middleware/maf222/mobile/api-ref/oracle/adfmf/json/JSONObject.html https://developer.android.com/reference/org/json/JSONObject.html
你不能把重复键放在JSON中 –
@ cricket_007他正在迭代地图,所以不应该有任何重复键 –
你应该检查键或值是否为空,因为一些地图支持空值 –