当前位置: 首页 > 知识库问答 >
问题:

Java中的JSON加载:java.lang.ClassCastException:java.lang.Long不能强制转换为java.lang.Integer

颜阳炎
2023-03-14
    public void Write() {

        FileWriter file = null;
        try {
            JSONObject o = new JSONObject();
            JSONObject obj = new JSONObject();
            obj.put("name", "mky4ong.com");
            obj.put("age", new Integer(100));
            JSONObject obj2 = new JSONObject();
            obj2.put("name", "mk54yong.com");
            obj2.put("age", new Integer(1800));
            file = new FileWriter(filename);
            JSONArray list = new JSONArray();
            list.add(obj);
            list.add(obj2);

            o.put("messages", list);

            file.write(o.toJSONString());
            file.flush();
            file.close();
        } catch (IOException ex) {logger.error("{}", ex.getCause());} finally {try {file.close();} catch (IOException ex) {logger.info("{}",ex.getCause());}}   
}
public void Load() {
    JSONParser parser = new JSONParser();
    Object obj = null;
    try {
        obj = parser.parse(new FileReader(filename));
    } catch (IOException | ParseException ex) {logger.info("{}", ex.getCause());}
    JSONObject jsonObject = (JSONObject) obj;
    JSONArray msg = (JSONArray) jsonObject.get("messages");
    Iterator<JSONObject> iterator = msg.iterator();
    while (iterator.hasNext()) {
        JSONObject ob = iterator.next();
        String name =(String) ob.get("name");
        Integer age =(Integer) ob.get("age");
        logger.info("name: {}, age: {}", name, age);
    }
}
}

我试过用多种方式选角,但都不起作用。为什么会发生这样的错误?

ps:我正在使用编译组:'com.googlecode.json-simple',名称:'json-simple',版本:'1.1.1'

共有1个答案

李森
2023-03-14

当您编写json文件时,所有附加信息都将丢失(在您的例子中,您使用的integer类型。当您读取它时,当JSONParser遇到没有小数点的数字时,它将自动使用long。请尝试在您的阅读器中使用long。请注意,阅读器对编写器一无所知。它只能读取文件并根据需要解释它。

所以回答你的问题:

Long age =(Long) ob.get("age");

会奏效的。

 类似资料: