Java Category/Java

[Java] JSON 데이터 형식

ReBugs 2023. 8. 15.

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 


JSON - Java 다운로드

https://github.com/stleary/JSON-java

 

GitHub - stleary/JSON-java: A reference implementation of a JSON package in Java.

A reference implementation of a JSON package in Java. - GitHub - stleary/JSON-java: A reference implementation of a JSON package in Java.

github.com

위 사이트에 접속해서 JAR 파일을 다운받는다.

이후 프로젝트에 해당 JAR 파일을 추가해주고, Build Path를 해준다.

 

명령프롬트와 같이 콘솔에서 실행할 경우, 환경 변수 CLASSPATH에 해당 JAR 파일 경로를 등록해야 한다.


JSON

네트워크로 전달하는 데이터가 복잡할수록 구조화된 형식이 필요하다.

네트워크 통신에서 가장 많이 사용되는 데이터 형식은 JSON(JavaScript Object Noation)이다.

객체 표기 {
  "속성명":"속성값",
  "속성명":"속성값",
...
}
속성명 : 반드시 "로 감싸야 함
속성값으로 가능한 것
-"문자열", 숫자, true,false
-객체{...}
-배열[...]
배열 표기 [항목, 항목, ...] 항목으로 가능한 것
-"문자열", 숫자, true,false
-객체{...}
-배열[...]

두 개 이상의 속성이 있는 경우에는 객체 { }로 표기하고, 두 개 이상의 값이 있는 경우에는 배열 [ ]로 표기한다.

 

아래는 JSON 표기법과 관련된 클래스들이다.

클래스 용도
JSONObject JSON 객체 표시를 생성하거나 파싱할 때 사용
JSONArray JSON 배열 표기를 생성하거나 파싱할 때 사용

 

예를 들어, 어떤 정보를 JSON으로 표기하면 아래와 같다.

{
  "id" : "winter",
  "name": "한겨울",
  "age" : 25,
  "student" : true,
  "tel": { "home" : "02-123-1234", "mobile" : "010-123-1234" },
  "skill" : ["java", "c", "c++"]
}

 

JSON에 데이터 저장하기

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.Charset;

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

public class CreateJsonExample {
	public static void main(String[] args) throws IOException {
		//JSON 객체 생성
		JSONObject root = new JSONObject();
		
		//속성 추가
		root.put("id", "winter");
		root.put("name", "한겨울");
		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);
		
		//배열 속성 추가
		JSONArray skill = new JSONArray();
		skill.put("java");
		skill.put("c");
		skill.put("c++");
		root.put("skill", skill);
		
		//JSON 얻기
		String json = root.toString();
		
		//콘솔에 출력
		System.out.println(json);
		
		//파일로 저장
		Writer writer = new FileWriter("C:/Temp/member.json", Charset.forName("UTF-8"));
		writer.write(json);
		writer.flush();
		writer.close();
	}
}
JSON에서 속성 순서는 중요하지 않기 때문에 추가한 순서대로 작성되지 않아도 상관없다.
그리고 줄바꿈 처리가 되지 않는데, 오히려 이것이 네트워크 전송량을 줄어주기 때문에 더 좋다.

 

JSON 데이터 파싱하기

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.Charset;

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

public class ParseJsonExample {
	public static void main(String[] args) throws IOException {
		//파일로부터 JSON 읽기
		BufferedReader br = new BufferedReader(
			new FileReader("C:/Temp/member.json", Charset.forName("UTF-8"))
		);
		String json  = br.readLine();
		br.close();
		
		//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.print("skill: ");
		for(int i=0; i<skill.length(); i++) {
			System.out.print(skill.get(i) + ", ");
		}
	}
}
/*
id: winter
name: 한겨울
age: 25
student: true
home: 02-123-1234
mobile: 010-123-1234
skill: java, c, c++, 
*/

'Java Category > Java' 카테고리의 다른 글

[Java] JDBC 개요 및 DB 연결하기  (0) 2023.08.17
[Java] TCP 채팅 프로그램  (0) 2023.08.16
[Java] 서버의 동시 요청 처리(스레드풀 이용)  (0) 2023.08.14
[Java] UDP 네트워킹  (0) 2023.08.13
[Java] TCP/IP 네트워킹  (0) 2023.08.12

댓글