본문 바로가기
gson

[gson] JsonParser 사용법

by hong0 2020. 12. 23.
반응형

gson의 JsonParser를 사용하는 방법을 정리한다.

Object를 String, JsonObject로 변경하는 방법이다.

 

먼저 아래와 같이 임시 class를 정의한다.

String 형태의 key는 "drink", Gson의 JsonArray value는 "coffee", "coke", "milk"를 넣어준다.

JsonArray에 값을 넣어줄 때는 add("value")로 한다.

import com.google.gson.JsonArray;

static class temp {
  String key;
  JsonArray value = new JsonArray();

  temp () {
    key = "drink";

    value.add("coffee");
    value.add("coke");
    value.add("milk");
  }
}

 

아래 코드는 위에서 생성한 Object를 String, JsonObject 형태로 변환하는 과정을 보여준다.

 

1번은 Object를 String 형태로 변환하는 과정이다.

gson의 toJson을 이용하여 String 형태로 변환한다.

 

그 다음 2번 ~ 3번 과정은 Object에서 JsonObject로 변환하는 과정이다.

JsonParser를 이용하여 JsonElement 형태로 변환하는데 아래와 같이 사용하면 정적 메서드를 사용하라는 표시가 나타날 수 있다. 사용하고 있는 gson 버전은 2.8.6으로 굳이 인스턴스화 할 필요없이 바로 사용하도록 가이드 하고 있다.

그래서 아래와 같은 경고 표시가 발생하는 경우에는 정적 메소드를 사용한다.

정적 메소드 사용 표시

 

정적 메소드 사용

JsonElement로 바꾼 이후에는 getAsJsonObject를 통해 JsonObject 형태로 변환할 수 있다. (3번)

JsonObject형태를 다시 String으로 변환할 경우에는 toString을 사용하여 변환할 수 있다. (4번)

4번 과정은 해당 예제에서 불필요해 보이나, 실제 Class 선언이 아니고 String 형태의 data를 전달받아 JsonObject 형태임을 검증하고 String 변환하는 경우에 사용할 수 있다.

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public void test() {

  Gson gson = new Gson();
  Object obj = new temp();

  String str = gson.toJson(obj);
  System.out.println("1. Object to String (toJson): " + str + '\n');

  //JsonParser parser = new JsonParser();
  //JsonElement element = parser.parse(str);
  JsonElement element = JsonParser.parseString(str);
  System.out.println("2. String to JsonElement (parseString): " + element + '\n');

  JsonObject jobj = element.getAsJsonObject();
  System.out.println("3. JsonElement to JsonObject (getAsJsonObect): " + jobj);
  
  String str1 = jobj.toString();
  System.out.println("4. JsonObject to String (toString): " + str1 + '\n');
}

위의 수행결과는 아래와 같다.

1. Object to String (toJson): {"key":"drink","value":["coffee","coke","milk"]}

2. String to JsonElement (parseString): {"key":"drink","value":["coffee","coke","milk"]}

3. JsonElement to JsonObject (getAsJsonObect): {"key":"drink","value":["coffee","coke","milk"]}

4. JsonObject to String (toString): {"key":"drink","value":["coffee","coke","milk"]}

 

최종적으로 위의 과정을 한줄로 표현하면 아래와 같다.

5번은 Object를 JsonObject로 변경하는 것으로 JsonParser.parserString(gson.toJson(obj)).getAsJsonObject()로 표현할 수 있다.

6번은 Object를 JsonObject 형태를 검증하여 String type으로 변경하는 것으로 JsonParser.parserString(gson.toJson(obj)).getAsJsonObject().toString()으로 표현할 수 있다.

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class jsonParserTest {

  static class temp {
    String key;
    JsonArray value = new JsonArray();

    temp () {
      key = "drink";

      value.add("coffee");
      value.add("coke");
      value.add("milk");
    }
  }

  public void test() {

    Gson gson = new Gson();
    Object obj = new temp();
    //////////////////////////////////////////////////////////////////////////////
    JsonObject jobj1 = JsonParser.parseString(gson.toJson(obj)).getAsJsonObject();
    System.out.println("5. Object to JsonObject : " + jobj1 + '\n');

    String str2 = JsonParser.parseString(gson.toJson(obj)).getAsJsonObject().toString();
    System.out.println("6. Object to String: " + str2 + '\n');
    //////////////////////////////////////////////////////////////////////////////
  }
}

최종 결과는 동일하게 아래와 같이 나온다.

5. Object to JsonObject : {"key":"drink","value":["coffee","coke","milk"]}

6. Object to String: {"key":"drink","value":["coffee","coke","milk"]}
반응형

'gson' 카테고리의 다른 글

[gson] JsonObject 데이터 추가  (0) 2021.06.30
[gson] JsonArray 사용법  (0) 2021.01.22
[gson] JsonObject 형태 파일 읽기 (JsonReader)  (0) 2020.12.27
[gson] JsonObject value 가져오기  (0) 2020.12.22
[gson] string을 jsonObject로 변경  (0) 2020.12.15

댓글