728x90
JAVA 자바 JSON 파일 쓰기/읽기 (한글 깨짐 인코딩 문제 해결법)
자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제(수정) (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)
728x90
'JAVA' 카테고리의 다른 글
[JAVA] null과 공백 ""의 차이 (0) | 2022.07.24 |
---|---|
자바 JSON 만들기, 추가, 제거, 파싱하는 법과 예제 (0) | 2022.05.10 |
이클립스 코드 자동 완성 설정 : Content assist (0) | 2022.05.01 |
이클립스 스윙 JFrame import 에러, Unknown GUI toolkit 문제 해결법 (0) | 2022.05.01 |