-
JSON 데이터 형식JAVA 2023. 3. 20. 23:30
- JSON(Javascript Object Notation) : 자바스크립트에서의 객체 표현 방식으로 초기에 자바스크립에서 사용하는 데이터 형식이었으나 여러가지 장점이 많아서 널리 쓰이게 됨.
- 네트워크 통신에서 가장 많이 사용되는 데이터 형식
- 네트워크로 전달하는 데이터가 복잡할수 구조화된 형식이 필요하며, 이때 JSON 및 XML 표현 방을 사용한다.
객체(Entity) 표기 배열 표기 {
"속성명": 속성값
"속성명": 속성값
}[항목, 항목, ...] 속성명: 반드시 "로 감싸야 함
속성값으로 가능한 것
- "문자열", 숫자, true/false
- 객체 { ... }
- 배열[ ...]
항목으로 가능한 것
- "문자열", 숫자, true/false
- 객체 {...}
- 배열 [ ... ]
- JSON 라이브러리 추가
- maven repository 접속(https://mvnrepository.com/)하여 "json" 검색해서 나오는 "JSON In Java"에서 최신 버전의 jar 파일 다운로드
- 이클립스에서 라이브러리 추가할 프로젝트의 lib 폴더에 jar 파일을 추가하고 Add Build Path - JSON 라이브러리에서 JSON 표기볍과 관련된 클래스
- JSONObject
- JSON 객체 표기를 생성하거나 파싱할 때 사용 - JSONArray
- JSON 배열 표기를 생성하거나 파싱할 때 사용
- JSONObject
- JSON 객체 생성 및 속성 추가
//JSON 객체 생성JSONObject root = new JSONObject();//속성 추가root.put("id", "winter");root.put("nam", "한겨웅");root.put("age", 25);root.put("student", true);//객체 속성 추가JSONObject tel = new JSONObject();tel.put("home", "02-123-1234");tel.put("mobile", "010-123-1234");root.put("tel", tel); //객체에 객체 추가- JSON 배열 생성 및 추가
//배열 속성 추가JSONArray skill = new JSONArray();skill.put("Java");skill.put("c");skill.put("c++");root.put("skill", skill); //객체에 배열 추가- JSON 형식을 문자열로 변환 및 출력
//JSON 얻기String json = root.toString();//콘솔에 출력System.out.println(json);- JSON 파일로 저장
//파일로 저장Writer writer = new FileWriter("C:/Temp/member.json", Charset.forName("UTF-8"));writer.write(json);writer.flush();writer.close();- JSON 데이터는 줄바꿈 없이 한 줄에 모든 데이터가 기록되며, 보기에는 불편하지만 데이터 전송 시 데이터 전소량을 줄이는 이점이 있다.
- JSON에서 속성은 순서 상관없이 저장된다.
- 이미 구조화되어 있기 때문에 데이터를 찾는데 문제가 없다.
- 다만 순서가 중요한 데이터에 사용하기에는 부적절하다. - 설정 정보를 저장하기 위해 사용
- XML, Properties 등의 형식도 비슷한 용도 사용 가능 - JSON의 데이터가 중괄호{ }로 시작하면 JSONObject로 해석하고, 대괄호 [ ]로 시작하면 JSONArray로 해석해야 한다.
- JSON 파일을 읽어와 데이터를 파싱하는 예제
public static void main(String[] args) {//파일로부터 JSON 읽기BufferedReader br = null;try {br = new BufferedReader( new FileReader("C:/Temp/member.json", Charset.forName("UTF-8")));String json = br.readLine();//JSON 파싱JSONObject root = new JSONObject(json);//속성 정보 읽기System.out.println("id: " + root.getString("id"));System.out.println("name: " + root.getString("name"));System.out.println("age: " + root.getInt("age"));System.out.println("student: " + root.getBoolean("student"));//객체 속성 정보 읽기JSONObject tel = root.getJSONObject("tel");System.out.println("home: " + tel.getString("home"));System.out.println("mobile: " + tel.getString("mobile"));//배열 속성 정보 읽기JSONArray skill = root.getJSONArray("skill");System.out.println("skill: ");for(int i=0; i<skill.length(); i++) {System.out.println(skill.get(i) + ", ");}} catch (IOException e) {e.printStackTrace();} finally {try {br.close();} catch (IOException e) {e.printStackTrace();}}}