JAVA

JSON 데이터 형식

hohahihi 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 배열 표기를 생성하거나 파싱할 때 사용

 

  • 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();
        }
    }
}