2017-04-11 24 views
0

JSONファイルを読み込み、値を取り出していくつかの変更を行います。JSONArrayに書き込む

基本的には配列にいくつかの値を追加しました。その後、ファイルに書き戻したいと思います。私がJSONArrayをファイルに書き込むと、JSONArrayオブジェクトではなく文字列として書き込まれます。どうすればいいですか?私は、JSONファイルに書いて、次のコードで

JSONArray rooms = (JSONArray) jsonObject.get("rooms"); 
for (int i = 0; i < rooms.size(); i++) { 
    JSONObject room = (JSONObject) rooms.get(i); 
    String roomName = (String) room.get("roomName"); 
    System.out.println("RoomName: " + roomName + " Size: " + "O: " + oldRoomListSize.get(roomName) + " N: " + roomList.get(roomName).getRoomBook().size()); 
    if(oldRoomListSize.get(roomName) < roomList.get(roomName).getRoomBook().size()) { 
     int n = roomList.get(roomName).getRoomBook().size() - oldRoomListSize.get(roomName); 
     for (int j = n; j > 0; j--) { 
      int lenght = roomList.get(roomName).getRoomBook().size(); 

      JSONArray schedule = (JSONArray) room.get("schedule"); 
      Reservation r = roomList.get(roomName).getRoomBook().get(lenght-j); 
      schedule.add(r); 
     } 
    } 
} 

fileWriter.write(jsonObject.toJSONString()); 
fileWriter.close(); 

は、あなたが見ることができるように、文字列として書かれていると私は戻ってそれを読みたいとき、それは私の問題をもたらします。

"schedule":["{Day: 1 - Start Time: 10}"] 

ファイルリーダー:

JSONArray schedule = (JSONArray) room.get("schedule"); 
for (int j = 0; j < schedule.size(); j++) { 
    JSONObject s = (JSONObject) schedule.get(j); 
    String day = (String) s.get("day"); 
    String startTime = (String) s.get("startTime"); 
    lRoom.setRoomBook(Integer.parseInt(day), Integer.parseInt(startTime)); 
} 

Error: java.lang.ClassCastException: java.lang.String cannot be cast to org.json.simple.JSONObject

エラーが発生し、後(導入日と開始時刻)配列に新しい値を入力します。それは文字列として書かれています。また、それを再度読み込もうとすると、配列に文字列があるため、解析できないというエラーが表示されます。

入力ファイル:

{ 
"rooms":[ 
     {"maxOccupants":"10", 
     "schedule":[{"startTime":"1","day":"10"},{"startTime":"20","day":"20"},{"startTime":"11","day":"122017"}], 
     "tv":"false", 
     "mobilePhone":"false", 
     "projector":"true", 
     "buildID":"1", 
     "floor":"2", 
     "roomName":"room1"}, 

     {"maxOccupants":"4", 
     "schedule":[{"startTime":"10","day":"1"},{"startTime":"11","day":"122017"},{"startTime":"11","day":"15"}], 
     "tv":"false", 
     "mobilePhone":"false", 
     "projector":"false", 
     "buildID":"1", 
     "floor":"2", 
     "roomName":"room2"}, 

     {"maxOccupants":"5", 
     "schedule":[{"startTime":"1","day":"10"},{"startTime":"11","day":"122017"}], 
     "tv":"false", 
     "mobilePhone":"false", 
     "projector":"true", 
     "buildID":"2", 
     "floor":"3", 
     "roomName":"room3"} 

     ] 
} 
+0

あなたは、入力ファイルの内容を提供してもらえますか?または少なくとも関連するスニペット –

+0

また、 'Reservation'クラスのコード –

+0

が完了しました。サポートありがとう。 –

答えて

1

問題は解決します!私はJSONObjectを作成していなかったので、JSON Arrayに直接オブジェクトを導入して、Stringへの会話を強制しました。ここで

は、問題の解決である:

JSONObject jsonObj = new JSONObject(); 
String startTime = String.valueOf(r.getStartTime()); 
String day = String.valueOf(r.getDay()); 

jsonObj.put("startTime", startTime); 
jsonObj.put("day", day); 
schedule.add(jsonObj);