📌 해당 글은 필자가 개인공부한 글입니다. 저작권 및 내용에 문제가 있으면 댓글남겨주세요!
Java에서는 JSON 데이터를 파싱하여 객체 or 배열로 변환하기 위해 JsonParser 객체를 사용할 수 있다.
JsonParser 객체는 -> JSON 데이터를 파싱하기 위해 다음과 같은 메소드를 제공한다.
parse(String json)
JsonObject 또는 JsonArray객체로 변환한다.parse(Reader json)
JsonObject 또는 JsonArray 객체로 변환한다.parse(InputStream 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
}
]
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로 설정할 수 있다.