JsonParser 메소드

지환·2024년 7월 18일

Json

목록 보기
2/3

📌 해당 글은 필자가 개인공부한 글입니다. 저작권 및 내용에 문제가 있으면 댓글남겨주세요!

JsonParser

Java에서는 JSON 데이터를 파싱하여 객체 or 배열로 변환하기 위해 JsonParser 객체를 사용할 수 있다.

JsonParser 객체는 -> JSON 데이터를 파싱하기 위해 다음과 같은 메소드를 제공한다.

  1. parse(String json)

    • JSON 문자열을 파싱하여 JsonObject 또는 JsonArray객체로 변환한다.
  1. parse(Reader json)

    • JSON 문자열을 파싱하여 JsonObject 또는 JsonArray 객체로 변환한다.
  2. parse(InputStream json)

    • JSON 문자열을 파싱하여 JsonObject 또는 JsonArray객체로 변환

그렇다면 여기서 말하는 JsonObject와 JsonArray가 무엇일까?

JsonObject : 중괄호 ({})로 둘러싸인 객체 (키-값 쌍의 집합)

{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "zipcode": "12345"
  },
  "hobbies": ["reading", "travelling", "swimming"]
}

JsonArray : ([])로 둘러싸인 배열을 나타낸다.

[
  {
    "name": "John Doe",
    "age": 30,
    "isStudent": false
  },
  {
    "name": "Jane Smith",
    "age": 25,
    "isStudent": true
  },
  {
    "name": "Emily Johnson",
    "age": 35,
    "isStudent": false
  }
]

JsonParser 예제

public class Json {
    public static void main(String args[]) {
        String jsonStr = "{\"name\":\"Jihwan\",\"age\":30,\"city\":\"New York\"}";
        // Json 문자열 
        JsonParser parser = new JsonParser();
        // Json 문자열을 JsonParser 객체를 통해서 변환
        JsonObject jsonObject = parser.parse(jsonStr).getAsJsonObject();
        // getASJsonObject : JsonElement 객체 -> JsonObject로 변환하는 역할을 한다.

        System.out.println(jsonObject);
    }
}

{"name":"Jihwan","age":30,"city":"New York"}

parser.parse(jsonStr).getAsJsonObject(); 이 부분은 어떻게 동작할까?

parser.parse(jsonStr)

parse작업을 진행하면, jsonStr 문자열 -> JSON으로 파싱한다.

parse() 메소드는 문자열을 파싱하여 JsonElement 객체를 반환한다.

JsonElement란 JsonObject, JsonArray,JsonPrimitive의 super 클래스이며 JSON 구조의 모든 형태를 표현할 수 있다.

그렇게 받은 JsonElement 객체 -> JsonObject로 변환

JsonObject jsonObject = jsonElement.getAsJsonObject();

JsonElement객체를 -> JsonObject로 변환한다.

그렇다면 Json의 프로퍼티를 추가하고 싶으면 어떻게 해야될까?

addProperty 메소드를 이용하면 쉽게 프로퍼티를 추가할 수 있다.

public class Json {
    public static void main(String args[]) {
        String jsonStr = "{\"name\":\"Jihwan\",\"age\":30,\"city\":\"New York\"}";
        // Json 문자열 
        JsonParser parser = new JsonParser();
        // Json 문자열을 JsonParser 객체를 통해서 변환
        JsonObject jsonObject = parser.parse(jsonStr).getAsJsonObject();
        // getASJsonObject : JsonElement 객체 -> JsonObject로 변환하는 역할을 한다.

        System.out.println(jsonObject);


        jsonObject.addProperty("hi", "ho");
        System.out.println("After jsonObject => " + jsonObject);
    }
}

{"name":"Jihwan","age":30,"city":"New York"}
After jsonObject => {"name":"Jihwan","age":30,"city":"New York","hi":"ho"}

회사 소스코드를 분석하다가 JsonParser는 리턴타입이 JsonObject이거나 JsonArray라고 했는데, 어떻게 Object를 리턴하지? 라는 의문점을 가졌다.

그에 대한 답은 JSON 문자열이 객체를 나타내는 경우

예를들어 {"name" : "John", "age" : 30}와 같은 형태라면 parse 메소드는 JSONObject를 반환한다.

parse 메소드는 파싱한 결과가 JSONObject, JSONArray 혹은 다른 기본 타입 중 무엇이 될지 컴파일 타임에는 알 수 없기 때문에 반환 타입을 Object로 설정할 수 있다.

profile
아는만큼보인다.

0개의 댓글