본문으로 바로가기

[Java]자바 json형식을 파싱하자!(gson활용)

category Java 2018. 6. 20. 15:34

자바에서 json 형식의 문자열을 파싱하는방법에 대해 알아보겠따.


일반적으로 java 프로젝트를 생성하면 json 을 파싱하기위한 라이브러리가 없다. 때문에 json파싱에 필요한 라이브러리를 외부에서 가져와야한다.


json을 파싱하기 위한 라이브러리는 여러가지가 있지만 gson을 활용하여 파싱하보겠다.


gson 은 google에서 만든 json라이브러리로 google + json 을 합쳐서 gson이라고 부르는것같다 ㅋㅋ



gson 라이브러리 다운로드.


포스팅에 gson 라이브러리 파일을 올려도 되겠지만.. 시간이가면 버전도 올라가고 그때마다 파일을 바꿀수도 없으니 최신버전을 원하는 사람들을 위해 다운로드 하는방법부터 스겠다.


1. 먼저 메이븐저장소에서 gson을 검색해준다.



2.원하는 버전을 누른다.


3.jar누르면 다운로드!


이렇게 gson을 받았따.


그럼 이클립스 자바 프로젝트에서 외부라이브러리를 추가해주자.


(추가방법은 http://dpdpwl.tistory.com/61 참고)



json 파싱


라이브러리도 추가가 되었으면 이제 json형식인 문자열을 하나 만들고 파싱하는 법을 보면서 어떻게 하는지 알아보겠다.


파싱하기에 앞서서 json의 형식에 대해 간단히 알아보고 진행하겠습니다.


json은 key와 value 가 중괄호 { , } 안에서 표현되고,  대괄호 [ , ]  는 하나의 value 가 될 수 있다.


이 중괄호를 object 라고하며 대괄호는 array라고 한다.


이해가 잘 안될수 있으니 예제를 보며 알아보겠다.


이와같은 형식의 json 문자열이있다.

String str = "[{'NO':1,'NAME':'APPLE','KOR':'사과','PRICE':'1000'},{'NO':2,'NAME':'BANANA','KOR':'바나나','PRICE':'500'},{'NO':3,'NAME':'MELON','KOR':'메론','PRICE':'2000'}]";


파싱을위해 JsonParser 객체를 만들어준다.

JsonParser jsonParser = new JsonParser();


그 다음 JsonArray 를 선언하여 JsonParser 로 문자열을 파싱한다.


Array가 대괄호를 뜻하기에 [ ] 안의 데이터가 JsonArray에 담긴다. Array(대괄호)를 나누는 key가 없으므로 곧바로 JsonParser를 이용해 파싱한다.

JsonArray jsonArray = (JsonArray) jsonParser.parse(str);


루프를 돌면서 jsonArray 안의 object(중괄호) 를 빼내어 값을 추출한다. (jsonArray의 크기는 Array(대괄호) 안의 object(중괄호) 수 이다.)

for (int i = 0; i < jsonArray.size(); i++) {
JsonObject object = (JsonObject) jsonArray.get(i);
String NO = object.get("NO").getAsString();
String NAME = object.get("NAME").getAsString();
String KOR = object.get("KOR").getAsString();
String PRICE = object.get("PRICE").getAsString();

System.out.println(NO);
System.out.println(NAME);
System.out.println(KOR);
System.out.println(PRICE);
System.out.println();
}
1
APPLE
사과
1000

2
BANANA
바나나
500

3
MELON
메론
2000

object.get("태그") 로 object 안의 key를 찾아 해당하는 value를 리턴해준다.



다음은 object의 key가 있는 경우의 예를 알아보겠다.


이와같은 json문자열이 있다.

str = "{'fruit':[{'NO':1,'NAME':'APPLE','KOR':'사과','PRICE':'1000'},
                 {'NO':2,'NAME':'BANANA','KOR':'바나나','PRICE':'500'},
                 {'NO':3,'NAME':'MELON','KOR':'메론','PRICE':'2000'}],
       'animal':[{'NO':1,'NAME':'cat','KOR':'고양이','age':'3'},
                 {'NO':2,'NAME':'dog','KOR':'개','age':'5'},
                 {'NO':3,'NAME':'rabbit','KOR':'토끼','age':'2'}]}";


아까와는 다르게 object에 key가 있기에 JsonParser 를 Object 로 먼저 파싱한다.


다음 array를 obect에서 key(fruit)를 get하여 해당하는 object를 array로 담는다.

JsonParser Parser = new JsonParser();
JsonObject jsonObj = (JsonObject) Parser.parse(str);
JsonArray memberArray = (JsonArray) jsonObj.get("fruit");


다음 array에서 object 를 해당하는 key로 value를 추출한다. 


루프가 끝났으면 다음 array에 object의 key(animal)를 넣어array를 만든 후 루프를돈다.

System.out.println("=========fruit=========");          
for (int i = 0; i < memberArray.size(); i++) {          
	JsonObject object = (JsonObject) memberArray.get(i);
	System.out.println("번호 : " + object.get("NO"));     
	System.out.println("영어 : " + object.get("NAME"));   
	System.out.println("한글 : " + object.get("KOR"));    
	System.out.println("가격 : " + object.get("PRICE"));  
	System.out.println("------------------------");     
}                                                       
                                                        
memberArray = (JsonArray) jsonObj.get("animal");        
System.out.println("=========animal=========");         
for (int i = 0; i < memberArray.size(); i++) {          
	JsonObject object = (JsonObject) memberArray.get(i);
	System.out.println("번호 : " + object.get("NO"));     
	System.out.println("영어 : " + object.get("NAME"));   
	System.out.println("한글 : " + object.get("KOR"));    
	System.out.println("나이 : " + object.get("age"));    
	System.out.println("------------------------");     
}
=========fruit=========
번호 : 1
영어 : "APPLE"
한글 : "사과"
가격 : "1000"
------------------------
번호 : 2
영어 : "BANANA"
한글 : "바나나"
가격 : "500"
------------------------
번호 : 3
영어 : "MELON"
한글 : "메론"
가격 : "2000"
------------------------
=========animal=========
번호 : 1
영어 : "cat"
한글 : "고양이"
나이 : "3"
------------------------
번호 : 2
영어 : "dog"
한글 : "개"
나이 : "5"
------------------------
번호 : 3
영어 : "rabbit"
한글 : "토끼"
나이 : "2"
------------------------



댓글을 달아 주세요

  1. 문의 2018.10.29 15:21

    .....<<이 중괄호를 object 라고하며 대괄호는 array라고 한다.>>

    제가 알고 있는 것이란 약간 차이가 있어서 문의 드립니다.

    { } ( 대괄호로 감싸있으면 object 이고 , [ ] 중관호로 감싸고 있으면 array 아닌가요?

  2. BlogIcon 무한코딩 2019.04.19 11:04 신고

    너무감사합니다!