我正在尝试读取JSON文件以创建新的Object。我可以读取其中的所有字符串,但在尝试读取int时抛出ClassCastException。这是JSON文件。
{"id1" : "string1",
"id2": "string2",
"id3": 100.0
}
这是java代码。
public static Aparelho novoAparelho(JSONObject obj) {
Aparelho ap = null;
String tipe = (String) obj.get("id1");
String name = (String) obj.get("id2");
if(tipe.equals("anyString")) {
int pot = (int) obj.get("id3");
ap = new SomeObject(name, pot);
}
return ap;
}
它扔了。
线程“main”中的异常java.lang.ClassCastException:java.lang.Double无法强制转换为java.lang.Integer
答案 0 :(得分:3)
首先将其投放到double
:
int pot = (int) (double) obj.get("id3");
ap = new SomeObject(name, pot);
令人困惑的是,有三种演员阵容:
在这种情况下,你有Object
(实际上是一个盒装的Double
),你想要一个原始的int。您无法使用相同的广告素材进行拆箱和转换,因此我们需要两个演员:首先从Object
到double
(取消装箱),一个从double
到{{1} }(转换)。
答案 1 :(得分:0)
整数没有小数点。
您应该解析int而不是转换为int。
例如:
if (tipe.equals("anyString")) {
String pot = obj.get("id3");
int x = Integer.parseInt(pot);
ap = new SomeObject(name, x);
}
答案 2 :(得分:0)
由于您知道该字段应该是int
,因此您可以利用JSONObject api为您处理解析:
if(tipe.equals("anyString")) {
int pot = obj.getInt("id3");
ap = new SomeObject(name, pot);
}
这比投射方法更强大 - 如果有人更改传递给你的json,接受的答案可能会中断。