티스토리 뷰

1. JSON 다운로드


JSON 파싱을 이용하기 위해서는 JSON 라이브러리를 추가해주어야 합니다. 

그러기 위해 이미 만들어져 있는, 표준화된 JSON을 사용하도록 하겠습니다.

구글에서 배포중인 json_simple-1.1.1.jar 을 다운받는 방법과 maven에 설정하는 방법이 있습니다.


  • MAVEN 설정

1
2
3
4
5
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>
cs


이와 같이 직접 입력해주면 사용할 수 있습니다.


  • 직접 다운로드

https://code.google.com/archive/p/json-simple/downloads 에 들어가서 원하는 버전을 다운로드 받거나

json-simple-1.1.1.jar를 다운로드 받아도 됩니다.

그 후, 다운로드한 jar 파일을 Eclipse의 라이브러리에 추가합니다.



다음과 같이 jar 파일을 추가해준 뒤 Apply 해주면 JSON을 사용할 준비는 모두 끝났습니다.


우리는 2019/02/19 - [개념 공부] - XML과 JSON 특징 그리고 차이점 에서 JSON에 대해 알아본 적이 있습니다. 따라서 JSON이 어떠한 구조이며, 어떻게 작성해야 하는 이미 알고 있습니다. 

그렇다면, 특정 언어에 종속되지 않는 JSON을 Java언어로 어떻게 파싱해야 할까요?

그 방법은 직접 코드를 짜보면서 알아보도록 하겠습니다.




2. Java언어로 JSON에 추가하기


라이브러리에 파일을 추가해줬으니 코드를 사용하기 전 import 해주어야 합니다.


1
2
3
import org.json.simple.JSONObject; // JSON객체 생성
import org.json.simple.parser.JSONParser; // JSON객체 파싱
import org.json.simple.parser.ParseException; // 예외처리
cs


이제 코드를 작성하여 직접 JSON을 생성해보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package test;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
 
class JSONAdd {
    String json;
    void jsonadd() {
        JSONObject inner = new JSONObject();
        inner.put("name",  "송요시"); // key는 "name", value는 "송요시"
        inner.put("gender""여자"); // key는 "gender", value는 "여자"
        inner.put("age""25"); // key는 "age", value는 "25"
        inner.put("address""서울"); // key는 "address", value는 "서울"
        
        JSONObject outer = new JSONObject();
        outer.put("inf", inner);
        
        json = outer.toJSONString(); // JSON객체를 String으로 변환
 
        System.out.println(json);
        
    }
}
cs


다음과 같이 코드를 작성해서 데이터를 추가시켜주기만 하면 됩니다. 

JSON은 맵구조이기 때문에 key값과 value값이 쌍을 이뤄 저장됩니다. 따라서 name이라는 key와 송요시라는 value가 한 쌍을 이뤄 저장되고, gender라는 key와 여자라는 value가 쌍을 이루게 됩니다.

현재 이 값들을 inner로 선언해주고 있으며, 내부 JSON객체라고 할 수 있습니다.

그리고, outer로 선언한 JSON객체 inf에 inner의 내용들을 한 쌍으로 처리해 저장해줍니다. 쉽게 말하면 내부에 저장된 쌍으로 이루어진 데이터들을 외부에서 한번 더 크게 쌍으로 묶는다는 얘기입니다.


말로만 설명하면 너무 복잡하기 때문에 우리가 알고 있는 JSON 데이터 구조 형식으로 쉽게 보도록 하겠습니다.



우리가 알고있는 JSON 데이터의 구조 형식으로 나타내면 위의 그림과 같습니다. name, gender, age, address 라는 key가 각자 "송요시", "여자", "25", "서울"이라는 value값을 가져 inner에 저장됩니다.

그 후, 그렇게 쌍을 이뤄 저장된 {"address":"서울","gender":"여자","name":"송요시","age":"25"} 가 value값이 되고, inf가 key값이 되어 쌍을 이뤄 outer에 저장됩니다.

key = inf,  value ={"address":"서울","gender":"여자","name":"송요시","age":"25"}

이와 같이 JSON은 내부에서 외부 순서대로 데이터를 생성하게 됩니다.




3. JSON 객체를 파싱


이제, 2번의 순서대로 생성된 JSON 객체를 파싱하여 name, gender, age, address의 정보를 가져와보도록 하겠습니다.

이 단계에서 빼먹으면 안되는 점은, 파싱 과정에서 데이터가 잘못 불러질 수도 있기 때문에 별도의 예외처리를 해주셔야 합니다.


1
2
3
4
5
6
7
8
9
10
11
public class JsonExample { // 메인함수
    public static void main(String[] args) throws ParseException { // 예외처리
        
        JSONAdd jsonAdd = new JSONAdd();
        jsonAdd.jsonadd(); // 전에 만든 JSON 생성 클래스를 불러옴
        
        JSONParser parser = new JSONParser(); // 파싱 작업을 하기 위한 객체를 만들어 줌
        
        JSONObject obj = (JSONObject)parser.parse(jsonAdd.json); // String json을 파싱받은 뒤, JSONObject 형태로 저장함
        JSONObject inf = (JSONObject)obj.get("inf");
}
cs


이와 같이 코드를 작성하게 되면, obj 객체는 파싱된 데이터를 가지게 됩니다. 여기서 파싱된 데이터는 2번에서 작성한 outer 데이터가 되겠습니다.

데이터를 생성할 때에는 내부에서 외부 순서로 생성하지만, 데이터를 받아오기 위해서는 외부 → 내부 순서대로 접근해야 합니다. 그렇기 때문에 먼저 "inf"에 접근해야 합니다.

inf에 접근한 다음은, 내부의 데이터 name, gender, age, address 정보를 파싱해야겠죠?


1
2
3
4
5
        // "" 안은 String이기 때문에 (String)inf.get으로 형변환
        String name = (String)inf.get("name"); // inf객체의 name정보 파싱
        String gender = (String)inf.get("gender"); // inf객체의 gender정보 파싱
        String age = (String)inf.get("age"); // inf객체의 age정보 파싱
        String address = (String)inf.get("address"); //inf객체의 address정보 파싱
cs


이제 다음과 같이 모든 정보를 파싱했으면, 제대로 데이터를 가져왔는지, 제대로 파싱했는지 확인하기 위해 출력하는 단계만 남게 됩니다.


1
2
3
4
        System.out.println("이름 : " + name);
        System.out.println("성별 : " + gender);
        System.out.println("나이 : " + age);
        System.out.println("주소 : " + address);
cs

코드를 출력해보면?!!



원하는 대로 잘 출력된 것을 확인 할 수 있습니다~

제가 작성한 코드 전체는 아래 첨부하도록 하겠습니다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package test;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
 
class JSONAdd {
    String json;
    void jsonadd() {
        JSONObject inner = new JSONObject();
        inner.put("name",  "송요시");
        inner.put("gender""여자");
        inner.put("age""25");
        inner.put("address""서울");
        
        JSONObject outer = new JSONObject();
        outer.put("inf", inner);
        
        json = outer.toJSONString();
        //System.out.println(json);
        
    }
}
 
public class JsonExample {
    public static void main(String[] args) throws ParseException {
        
        JSONAdd jsonAdd = new JSONAdd();
        jsonAdd.jsonadd();
        
        JSONParser parser = new JSONParser();
        
        JSONObject obj = (JSONObject)parser.parse(jsonAdd.json);
        JSONObject inf = (JSONObject)obj.get("inf");
        String name = (String)inf.get("name");
        String gender = (String)inf.get("gender");
        String age = (String)inf.get("age");
        String address = (String)inf.get("address");
        
        System.out.println("이름 : " + name);
        System.out.println("성별 : " + gender);
        System.out.println("나이 : " + age);
        System.out.println("주소 : " + address);
    }
}
 
cs


이렇게 Java 언어로 JSON 생성, 파싱하는 예제를 해보았는데 어떠셨나요?! 

저는 직접 해보니 이해가 훨씬 쉬웠지만 능숙하게 사용할 수 있도록 계속 예제를 바꿔가며 해봐야겠어요 ㅎㅎ

다음 포스팅으로 만나도록 하겠습니다~ ( ღ'ᴗ'ღ )

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함