我在这里找到了关于如何处理这个异常的答案,但没有解释为什么会发生这种情况。我有以下代码:
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永远不会为空,此地图中的数据始终有效。
抛出异常会是什么情况?为什么我需要这个额外的代码?
答案 0 :(得分:4)
检查java docs
“如果值是非限定数字或名称重复。”
https://docs.oracle.com/middleware/maf222/mobile/api-ref/oracle/adfmf/json/JSONObject.html
答案 1 :(得分:3)
假设您使用org.json
中的JSONObject
org.json.JSONObject.put(String, double) : JSONObject
它在JSONObject中放置一个键/ double 对。
参数:
键:键字符串。 值: double ,即值。
返回:this
抛出:
JSONException 如果键为null或数字无效。
我知道数据总是如此 有效。为什么我需要这个额外的代码?
你可以让方法抛出异常,因为你不喜欢混乱你的代码,而且似乎你也无法通过捕获异常做任何有用的事情。
很明显,您知道传递的数据有效。但是图书馆不会知道。这就是为什么它会抛出一个经过检查的异常,只是为了让你知道它是否会失败。
答案 2 :(得分:1)
对于所有类型T,当键为null或值为非限定#时,JSONObject.put(String key,T value)抛出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
答案 3 :(得分:0)
您可以通过创建一个像这样的简单类来最大程度地减少工作量:
import org.json.JSONObject;
public class ForaBolsonaroJSON {
JSONObject jsonObject = new JSONObject();
public ForaBolsonaroJSON put(String name, Object value) {
try {
jsonObject.put(name, value);
return this;
} catch(Exception e) {
throw new RuntimeException(e);
}
}
public JSONObject getJsonObject() {
return jsonObject;
}
}