본문 바로가기
gson

[gson] JsonObject 형태 파일 읽기 (JsonReader)

by hong0 2020. 12. 27.
반응형

아래와 같이 JsonObject 형태의 파일을 읽는 방법을 정리한다.

{
	"fruit": "apple",
	"vegetable": {
		"first": "tomato",
		"second": "onion"
	}
}

 

기본적으로 파일을 읽을 때 FileReader(경로)를 통해 읽으며 import java.io.FileReader를 선언해줘야 한다.

이 때, 파일을 못찾은 경우에 대한 Exception 처리를 해줘야 하므로 import java.io.FileNotFoundException에 대한 처리를 해준다.

 

이제부터 Gson library를 이용하여 JsonObject 형태로 추출하는 방법을 설명한다.

JsonReader를 사용하는데 할당 시 FileReader(경로)를 통해 읽어올 수 있다. 이 후 이를 JsonObject class 형태로 변환을 하는데 이에 대한 설명은 아래 link에도 예제를 참고하면 된다.

 

[gson] JsonObject value 가져오기

gson library의 JsonOjbect 사용법을 정리한다. gson library 추가(eclipse)는 아래 link를 참조한다. hong00.tistory.com/40 [개발환경] gson 추가하기 (eclipse) gson은 구글에서 만든 라이브러리로 JSON의 자바..

hong00.tistory.com

얻어 온 JsonObject 형태의 key를 통해 값을 가져오면 정상적으로 출력되는 것을 알 수 있다.

 

다음은 JsonObject의 모든 key 값과 value를 접근하는 것을 추가로 넣었는데,

MapEntry를 이용하여 for loop를 실행한다. entrySet()을 할 경우 Map의 두번째 parameter가 JsonElement 이어야 한다. 대부분의 변환 된 형태는 JsonElement로 반환된다. 

 

첫번째 for loop 과정과 두번째 for loop 과정과 같이 두가지로 표현할 수 있으며, 두번째 for loop는 첫번째의 과정이 생략되어 한번에 실행된다는 의미이다.

entrySet을 사용할 경우 Set<Map.Entry<String, JsonElement>> 형태로 받는데 import java.util.Set이 필요하다. 두번째 for loop와 같이 사용할 경우에는 추가할 필요 없이 사용이 가능한 것이다.

Set<Map.Entry<String, JsonElement> element = obj.entrySet();
for (Map.Entry<String, JsonElement> entry : element) {
	System.out.println("key: " + entry.getKey());
	System.out.println("val: " + entry.getValue() + "\n");
}

Map 형태로 접근한 이후 entry의 key와 value를 접근할 수 있다.

 

전체 test 코드는 아래와 같다.

package hello;

import java.io.FileReader;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Set;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonReader;

public class readJsonObjectFile {

	public void test(String path) {
	
		Gson gson = new Gson();
		try {
			JsonReader rd = new JsonReader(new FileReader(path));
			JsonObject obj = gson.fromJson(rd, JsonObject.class);
			
			System.out.println("\"fruit\": " + obj.get("fruit"));
			System.out.println("\"vegetable\" : " + obj.get("vegetable") + "\n\n");
			
			Set<Map.Entry<String, JsonElement>> element = obj.entrySet();
			for (Map.Entry<String, JsonElement> entry : element) {
				System.out.println("key: " + entry.getKey());
				System.out.println("val: " + entry.getValue() + "\n");
			}
			
			for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
				System.out.println("key: " + entry.getKey());
				System.out.println("val: " + entry.getValue() + "\n");
			}
		}
		catch (FileNotFoundException e) {
			System.out.println("file does not exist");
		}
	}
}

 

결과는 아래와 같이 출력된다.

"fruit": "apple" 
"vegetable" : {"first":"tomato","second":"onion"} 


key: fruit 
val: "apple" 

key: vegetable 
val: {"first":"tomato","second":"onion"}
반응형

'gson' 카테고리의 다른 글

[gson] JsonObject 데이터 추가  (0) 2021.06.30
[gson] JsonArray 사용법  (0) 2021.01.22
[gson] JsonParser 사용법  (0) 2020.12.23
[gson] JsonObject value 가져오기  (0) 2020.12.22
[gson] string을 jsonObject로 변경  (0) 2020.12.15

댓글