[Java] GET 요청으로 읽어온 JSON 데이터 Key 추출하기

이강호·2023년 4월 8일
0
post-custom-banner

GET 요청을 통해 읽어들인 JSON 형태의 데이터에서 Key 들을 추출하는 소스이다. 재귀로 작성했고, 특이 사항은 다음과 같다.

  • 구분자는 (.)이다.
  • 배열의 경우 [0], [1]과 같은 형태로 key를 저장해 원하는 인덱스에 접근할 수 있다.
  • 파라미터로 있는 arrayMaxLength는 JSONArray에서 몇 번 인덱스까지 키로 저장할지 의미한다. 예를 들어 10으로 설정한 경우 key는 [0]에서 [9]까지만 저장하고 나머지는 버린다.
public static void main(String[] args) {
   String jsonString = null;
   HttpURLConnection con = null;
   BufferedReader in = null;
   try {
      URL url = new URL("my url");
      con = (HttpURLConnection) url.openConnection();
      con.setRequestMethod("GET");
      in = new BufferedReader(new InputStreamReader(con.getInputStream()));
      String inputLine;
      StringBuffer content = new StringBuffer();
      while ((inputLine = in.readLine()) != null) {
         content.append(inputLine);
      }
      in.close();
      jsonString = content.toString();
   } catch (Exception e) {
      e.printStackTrace();
   } finally {
      if (con != null) {
         con.disconnect();
      }
   }

   JSONObject jsonObject = new JSONObject(jsonString);
   Map<String, String> jsonMap = new TreeMap<>();
   setJsonMap(jsonMap, "", jsonObject, 10);
   System.out.println(jsonMap);
}

public static void setJsonMap(Map<String, String> jsonMap, String parentKey, JSONObject jsonObject, Integer arrayMaxLength) {
   Iterator iter = jsonObject.keys();
   while (iter.hasNext()) {
      String key = (String) iter.next();
      Object object = jsonObject.get(key);
      String myKey = parentKey + key;
      
      if (object instanceof JSONArray) {
         JSONArray jsonArray = (JSONArray) object;
         for (int i = 0; i < jsonArray.length() && i < arrayMaxLength; i++) {
            Object arrayObject = jsonArray.get(i);
            if (arrayObject instanceof JSONObject) {
               setJsonMap(jsonMap, myKey + "[" + i + "].", (JSONObject) arrayObject, arrayMaxLength);
            } else {
               jsonMap.put(myKey, object.toString());
            }
         }
      } else if (object instanceof JSONObject) {
         setJsonMap(jsonMap, myKey + ".", (JSONObject) object, arrayMaxLength);
      } else {
         jsonMap.put(myKey, object.toString());
      }
   }
}
profile
할 때 하고 놀 때 노는 개발자
post-custom-banner

0개의 댓글