[Java 자료구조] [JAVA] Java언어로 JSON 생성, 파싱 예제

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 데이터 구조 형식으로 쉽게 보도록 하겠습니다.

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

우리가 알고있는 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 생성, 파싱하는 예제를 해보았는데 어떠셨나요?! 

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

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

 

[출처] https://song-yoshiii.tistory.com/7

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
424 [java, spring] Spring에서 request와 response를 JSON format 으로 한번에 로깅하기 file 졸리운_곰 2021.06.18 178
423 [Spring Boot] 2) Springboot OncePerRequestFilter 와 GenericFilterBean의 차이 file 졸리운_곰 2021.06.18 21
422 [Spring boot] [Spring boot] Spring Boot servlet filter 사용하기 졸리운_곰 2021.06.18 17
421 [SpringBoot] Filter(필터) OncePerRequestFilter간단히 사용하기 file 졸리운_곰 2021.06.18 65
420 [Spring boot] Spring boot 에서 Filter 사용하기 졸리운_곰 2021.06.18 18
419 [Spring Boot] 스프링 부트에 필터를 '조심해서' 사용하는 두 가지 방법 졸리운_곰 2021.06.18 140
418 [Java 자료구조] [Java] 문자열의 첫 글자 제거 졸리운_곰 2021.05.24 403
417 [Java 자료구조] [java] 특정 문자열 사이의 문자열 추출하기, 정규식 졸리운_곰 2021.05.24 1875
» [Java 자료구조] [JAVA] Java언어로 JSON 생성, 파싱 예제 file 졸리운_곰 2021.05.17 19
415 이클립스에서 java 버전 변경 file 졸리운_곰 2021.04.29 33
414 [Java 자료구조] [Java] Immutable Class (불변 클래스) file 졸리운_곰 2021.03.07 26
413 [Java 자료구조] 불변 객체란? Java Immutable Object file 졸리운_곰 2021.03.07 48
412 [Java 자료구조] [Java] Immutable Object(불변객체) 졸리운_곰 2021.03.07 44
411 [java 자료구조] Oracle + Mybatis 환경에서의 Date 다루기 졸리운_곰 2021.02.25 57
410 Java JSON library Jackson Date Date Json 시리얼라이즈/디씨리얼라이즈 file 졸리운_곰 2021.02.25 28
409 [Java, JSON, jackson] Ignoring new fields on JSON objects using Jackson 졸리운_곰 2021.02.19 16
408 [Java] [Jackson] JsonInclude 속성에 대해 알아보자. 졸리운_곰 2021.02.03 592
407 [java] [jackson] Map - JSON간 변환 졸리운_곰 2021.02.02 41
406 [java] [자료구조] Remove null values from json using jackson 졸리운_곰 2021.02.02 78
405 Eclipse RAP Tutorial for Beginners - Workbench Application (OLD) file 졸리운_곰 2021.01.30 66
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED