试图从java中的JSON文件中读取Integer

时间:2015-04-10 18:22:18

标签: java json int

我正在尝试读取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

3 个答案:

答案 0 :(得分:3)

首先将其投放到double

int pot = (int) (double) obj.get("id3");
ap = new SomeObject(name, pot);

令人困惑的是,有三种演员阵容:

  • 转换基元值的那些
  • 更改引用类型的那些
  • 那些盒子和拆箱

在这种情况下,你有Object(实际上是一个盒装的Double),你想要一个原始的int。您无法使用相同的广告素材进行拆箱和转换,因此我们需要两个演员:首先从Objectdouble(取消装箱),一个从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,接受的答案可能会中断。