JAVA 자바 JSON 파일 쓰기/읽기 (한글 깨짐 인코딩 문제 해결법)

728x90

JAVA 자바 JSON 파일 쓰기/읽기 (한글 깨짐 인코딩 문제 해결법)

 

자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제(수정) (tistory.com)

 

자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제(수정)

자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제(수정) json simple 라이브러리 설치 작업환경 : 이클립스 JSON을 쉽게 가공하기 위해 미리 만들어진 라이브러리를 이용한다. Google Code Archive - Long-term

afterdawncoding.tistory.com

 

이전 게시글에서 다루었던 코드를 특정 경로에 파일로 생성하는 방법을 알아보자. 아래는 이전에 사용한 코드이다.


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

public class DataJson{
	JSONObject parent = new JSONObject();
	DataJson() {
		
		JSONArray childrens = new JSONArray();
		
		JSONObject child = new JSONObject();
		child.put("id", "min0320");
		child.put("password", "1234");
		child.put("name", "홍길동");
		child.put("phone", "01012345678");
		childrens.add(child);
		
		JSONObject child2 = new JSONObject();
		child2.put("id", "hun5327");
		child2.put("password", "1234");
		child2.put("name", "장길산");
		child2.put("phone", "01023456789");
		childrens.add(child2);
		
		parent.put("회원정보", childrens);
		
		
		JSONArray foodArr = new JSONArray();
		JSONObject food = new JSONObject();
		food.put("name", "떡볶이");
		food.put("price", "3000");
		foodArr.add(food);
		
		JSONObject food2 = new JSONObject();
		food2.put("name", "마라탕");
		food2.put("price", "5000");
		foodArr.add(food);
		
		parent.put("음식정보", foodArr);
		
		
	}
	void DataPrint() {
		System.out.println(parent.toString());
	}
		

	public static void main(String[] args) {
		DataJson data = new DataJson();
		data.DataPrint();

	}
}
{"회원정보":[{"password":"1234","phone":"01012345678","name":"홍길동","id":"min0320"},{"password":"1234","phone":"01023456789","name":"장길산","id":"hun5327"}],"음식정보":[{"price":"3000","name":"떡볶이"},{"price":"3000","name":"떡볶이"}]}

 

JSON 파일 생성, 쓰기

다른 사람들이 작성한 방법을 사용하면 쉽게 파일을 생성할 수 있었지만 한글 값이 자꾸 깨지는 문제가 발생해서 아래와 같이 인코딩하는 방법으로 해결하였다.

 

(...)
(import문제 발생시 ctrl + shift + o )
    
    public static void main(String[] args) {
		DataJson data = new DataJson();
		data.DataPrint();
		try { 
			FileOutputStream fileOutputStream = new FileOutputStream("C:\\KIOSK\\KIOSK_USER\\user_database.json");
			OutputStreamWriter OutputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
			BufferedWriter file = new BufferedWriter(OutputStreamWriter);
			
			file.write(data.parent.toJSONString()); 
			file.flush(); 
			file.close(); 
		} catch (IOException e) { 
				e.printStackTrace(); 
		}

	}
}

다만 이 방법의 문제점은 지정한 경로가 존재하지 않을 경우 에러가 발생하기 때문에 미리 경로를 확보해두어야 한다.

 

Object형태의 JSON값을 String형태로 형변환해야 파일을 작성할 수 있다.

 

 

 

JSON 파일 읽기

JSON으로 저장된 데이터를 읽어 다시 Object로 형변환한다.

JSON 값에 따라 파싱할 때 에러가 날 수 있으므로 예외처리를 해야한다.

(...)

public static void main(String[] args) throws IOException, ParseException {

		FileInputStream fileInputStream = new FileInputStream("C:\\KIOSK\\KIOSK_USER\\user_database.json");
		InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
		BufferedReader file = new BufferedReader(inputStreamReader);
		JSONParser parser = new JSONParser();
		
		JSONObject jsonObj = (JSONObject)parser.parse(file);
		System.out.println(jsonObj);
	
	}
}
{"회원정보":[{"password":"1234","phone":"01012345678","name":"홍길동","id":"min0320"},{"password":"1234","phone":"01023456789","name":"장길산","id":"hun5327"}],"음식정보":[{"price":"3000","name":"떡볶이"},{"price":"3000","name":"떡볶이"}]}

JSONParser를 이용해 읽어온 파일을 통째로 object형태로 파싱한다. 

 

이렇게 외부에 JSON을 두고 데이터를 수정하도록 하면 여러명이서 프로젝트 작업을 하더라도 데이터를 온전하게 공유할 수 있을 것이다.

 

이렇게 불러온 데이터를 세분화하여 파싱하는 방법은 아래 글을 참고하면 좋겠다.

 

자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제(수정) (tistory.com)

 

자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제(수정)

자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제(수정) json simple 라이브러리 설치 작업환경 : 이클립스 JSON을 쉽게 가공하기 위해 미리 만들어진 라이브러리를 이용한다. Google Code Archive - Long-term

afterdawncoding.tistory.com

 

728x90