Flaming Soccer ball
JAVA

30일차 22.11.02 JSON파일 읽어오기

leo lee 2022. 11. 2.
반응형
package jsonfile;

import java.util.List;

public class JsonVO {

	private String 동명;
	private String 설치주소;
	private String 위치;
	
	public JsonVO() {
		super();
	}
	
	public JsonVO(String 동명, String 설치주소, String 위치) {
		super();
		this.동명 = 동명;
		this.설치주소 = 설치주소;
		this.위치 = 위치;
	}

	public String get동명() {
		return 동명;
	}
	public void set동명(String 동명) {
		this.동명 = 동명;
	}
	public String get설치주소() {
		return 설치주소;
	}
	public void set설치주소(String 설치주소) {
		this.설치주소 = 설치주소;
	}
	public String get위치() {
		return 위치;
	}
	public void set위치(String 위치) {
		this.위치 = 위치;
	}
	
	
	
	@Override
	public String toString() {
		return "JsonVO [동명=" + 동명 + ", 설치주소=" + 설치주소 + ", 위치=" + 위치 + "]";
	}
	
	
	
}

Json 파일을 객체로 받아줄 VO class 생성

 

package jsonfile;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;



public class ReadJsonFile {
	
	static ArrayList<JsonVO> list = new ArrayList<>();
	
	public static void Read() {
		JSONParser parser = new JSONParser();
		JSONArray array;
		JsonVO jvo;
		try {
			FileReader reader = new FileReader("abc.json");
			array = (JSONArray)parser.parse(reader);


			for(int i = 0 ; i < array.size(); i++) {
				JSONObject obj = (JSONObject)array.get(i);
				Iterator<?> it = obj.keySet().iterator();
				jvo = new JsonVO();

				while(it.hasNext()) {

					String key = (String) it.next();
					if(key.equals("동명"))jvo.set동명((String)obj.get(key));
					else if(key.equals("설치주소"))jvo.set설치주소((String)obj.get(key));
					else if(key.equals("위 치"))jvo.set위치((String)obj.get(key));

				}
				list.add(jvo);
			}


			
			reader.close();
		} catch (IOException | ParseException e) {
			e.printStackTrace();
		}

	}
}

Jason파일을 읽어와서 만들어준 VO instance에 담아 VO istance를 list에 추가

package java_1101;


import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;

public class RestJsonExample {

   public static void main(String[] args) throws Exception {
      
      StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/6410000/GOA/GOA001"); /*URL*/
        urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=jJ%2F7eW0YlYtBAyPaD%2FKzkGdJ5hGzdDIc6BUEyJyc02KYC3ysb4HivMFrzlmbFM9D7xdAoBpe64OOm2X7jEJ4bA%3D%3D"); /*Service Key*/
        urlBuilder.append("&" + URLEncoder.encode("type","UTF-8") + "=" + URLEncoder.encode("json", "UTF-8")); /*응답결과json, xml구분*/
        urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("100", "UTF-8")); /*한 페이지 결과 수*/
        urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지 번호*/
        URL url = new URL(urlBuilder.toString());
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-type", "application/json");
        System.out.println("Response code: " + conn.getResponseCode());
        BufferedReader rd;
        if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
            rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        } else {
            rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
        }
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        rd.close();
        conn.disconnect();
        value = sb.toString();   
        
        
        
        
     // JSONParser에 JSON데이터를 넣어 파싱한 다음 JSONObject로 반환한다.
           JSONObject objData = (JSONObject)new JSONParser().parse(value);
           // JSONObject에서 Array데이터를 get하여 JSONArray에 저장한다.
           JSONArray arrData = (JSONArray)objData.get("items");

           // 배열 데이터 출력하기
           JSONObject tmp;
           JSONArray tmpArr;
           StringBuilder sb2= new StringBuilder();
           for(int i=0; i<arrData.size(); i++){
              tmp = (JSONObject)arrData.get(i);

              sb.append("area("+i+"): " + tmp.get("area")+"\n");
              sb.append("name("+i+"): " + tmp.get("name")+"\n");

              // Array데이터 안에 Array 데이터 꺼내기 
//              tmpArr = (JSONArray)tmp.get("items");
//              sb.append("genres("+i+"): ");
//              for(int j=0; j<tmpArr.size(); j++){
//                 sb.append(j+"." + tmpArr.get(j));
//                 if(j!=tmpArr.size()-1) sb.append(", ");
//              }
              sb.append("\n");
           }
           System.out.println(sb.toString());

        
      
      
      
      
      
      BufferedOutputStream bs = null;
      Date d = new Date();
      try {
         bs = new BufferedOutputStream(new FileOutputStream("C:\\Users\\user\\Desktop\\jsonEx\\Sample.txt"));
         String str = d + sb.toString();
         bs.write(str.getBytes()); //Byte형으로만 넣을 수 있음

      } catch (Exception e) {
                   e.getStackTrace();
         // TODO: handle exception
      }finally {
         bs.close();
      } 
      
      
      
      
      
      
   }
    
   // jsonData
   static String value;
        
        
        
        
        
        
   
   }

URL에 주어진 json파일을 불러와서 저장하는 방법 

 

package jsonfile;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

import com.fasterxml.jackson.databind.ObjectMapper;

public class WriteJsonFile {
		
	String filename;
	public void write(ArrayList<?> list) {
		Scanner sc;
		try {
			sc = new Scanner(System.in);
			filename = sc.nextLine();
			System.out.print("만들 파일 이름을 적어주세요>");
			FileWriter writer = new FileWriter(filename+".json");
			ObjectMapper mapper = new ObjectMapper();
			String jsonString = mapper.writeValueAsString(list);
			
			writer.write(jsonString);
				
			
			writer.flush();
			writer.close();
			sc.close();
			
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
}

읽어온 데이터를 다시 json파일로 저장해주는 방법

 

package jsonfile;

public class AddJsonData {

	public static void main(String[] args) {
		ReadJsonFile.Read();
		System.out.println(ReadJsonFile.list);
		ReadJsonFile.list.remove(0);
		System.out.println(ReadJsonFile.list);
		ReadJsonFile.list.add(new JsonVO("신사동",
				  "강남대로152길 14(신사동 513-2)",
				  "FLASH BAR 동쪽(전신주)"));
		System.out.println(ReadJsonFile.list);
		
		ReadJsonFile.list.get(0).set설치주소("바보");
		System.out.println(ReadJsonFile.list);
	}

}

list에 담긴 VO인스턴스를 삭제하고 추가하는 클래스, 실제 나눠서 해줘도 되나 조금 생각이 필요하여 한번에 작성함

반응형

'JAVA' 카테고리의 다른 글

28일차 22.10.31  (0) 2022.10.31
27일차 22.10.28  (0) 2022.10.28
26일차 22.10.27  (0) 2022.10.27
25일차 22.10.26  (0) 2022.10.26
24일차 22.10.25  (0) 2022.10.25

댓글