我正在尝试corpora中的示例,并使用此代码写入文件:
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);
}
}
}
但是虽然数据成功写入{"messages":[{"name":"mky4ong.com","age":100},{"name":"mk54yong.com","age":1800}]}
,但我在加载时遇到了麻烦。
在这一行Integer age =(Integer) ob.get("age");
,编译器说&#34;线程中的异常&#34; main&#34; java.lang.ClassCastException:java.lang.Long无法强制转换为java.lang.Integer&#34;。
我尝试过多种方式进行投射,但它并不起作用。为什么会发生这样的错误?
ps:我正在使用compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
答案 0 :(得分:5)
当您编写json文件时,所有其他信息都会丢失(在您的情况下是您使用的Integer
类型。当您阅读它时,JSONParser会在遇到没有小数点的数字时自动使用Long
尝试在阅读器中使用Long
。请注意,读者知道关于作者的 nothing 。它只能读取文件并按其认为合适的方式进行解释。
所以回答你的问题:
Long age =(Long) ob.get("age");
会奏效。