JAVA
JSON 데이터 형식
hohahihi
2023. 3. 20. 23:30
- JSON(Javascript Object Notation) : 자바스크립트에서의 객체 표현 방식으로 초기에 자바스크립에서 사용하는 데이터 형식이었으나 여러가지 장점이 많아서 널리 쓰이게 됨.
- 네트워크 통신에서 가장 많이 사용되는 데이터 형식
- 네트워크로 전달하는 데이터가 복잡할수 구조화된 형식이 필요하며, 이때 JSON 및 XML 표현 방을 사용한다.
객체(Entity) 표기 | 배열 표기 |
{ "속성명": 속성값 "속성명": 속성값 } |
[항목, 항목, ...] |
속성명: 반드시 "로 감싸야 함 속성값으로 가능한 것
|
항목으로 가능한 것
|
- 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();
}
}
}
|