前提・実現したいこと
Java初心者です。
カンマ区切りの文字列として受け取ったデータを配列に変換後、
配列をObject型に格納、その後の取り出し方がわかりません。
配列で取り出す方法がないか、ご教授お願いします。
データ
id | name | list |
---|---|---|
0 | taro | AAA,BBB,CCC |
1 | hanako | DDD,EEE,FFF |
該当のソースコード
java
1// DBから上記の値を取得 2public List<Map<String, Object>> getList() throws SQLException { 3 HashMap<String, String> parameterMap = new HashMap<>(); 4 try (PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM table")) { 5 try (ResultSet resultSet = preparedStatement.executeQuery()) { 6 ArrayList<Map<String, Object>> list = new ArrayList<>(); 7 while(resultSet.next()) { 8 list.add(setResultSetToMap(resultSet)); 9 } 10 return list; 11 } 12 } 13} 14//Listを代入 15List<Map<String, Object>> List = getList(); 16 17// 他のデータと整合するために、map化 18Map<String, JSONObject> ObjectMap= new HashMap<>(); 19for(Map<String, Object> map : List) { 20 JSONObject Object = new JSONObject(); 21 Object.put("id", map.get("id")); 22 Object.put("name", map.get("name")); 23 if(map.get("list") != null) { 24 String string = (String)map.get("list"); 25 // ここでカンマ区切りのリストに変換 26 List<String> list = Arrays.asList(string.split(",")); 27 Object.put("list", list); 28 } 29 ObjectMap.put(Object.getString("id"), Object); 30} 31 32// 別のデータと整合(内容は省略) 33List<JSONObject> outputObjectList = new ArrayList<>(); 34for(略){ //リスト数文ループ 35 JSONObject jsonObject = null; 36 jsonObject = ObjectMap.get(id); //上記の内容を丸ごと移行 37 jsonObject.put("address", "〇〇県"); 38 outputObjectList.add(jsonObject); 39} 40 41// 取り出し 42for (JSONObject obj : outputObjectList) { 43 44 // listを配列で受け取りたい 45 // ↓↓ここが不明↓↓ 46 List<String> list = obj.get("list"); // ※1 47 48 //この後配列を使いたい。。。 49 for (int j = 0; j < list .length(); ++ j) {...} 50 51} 52
試したこと
※1の部分でobj.get("list")の型が知りたかったので、以下四つを試し、
- if (obj.get("list") instanceof Object)
- if (obj.get("list") instanceof String)
- if (obj.get("list") instanceof JSONObject)
- if (obj.get("list") instanceof List)
Object,Listの場合Trueが返されたので、List<String>型で受け取れるはず、と※1のように記載しましたが
記述の時点で「型の不一致: Object から List<String> には変換できません」と警告がでてしまいました。
型の不一致のため、キャストする方法に変更しましたが、以下の通り記載すると、
「Objectから List<Object> への未検査キャスト」と警告表示されます。
- List<String> list = (List<String>) obj.get("list");
また、ほかの配列(JSONArray)で受けられるかと思い、以下のようにしましたが、
実行時に型が違います、とエラー表示されます。
- JSONArray list = obj.getJSONArray("list");