진이의 Developer Story

String -> JSON 변환 본문

Java

String -> JSON 변환

JIN3260 2016. 2. 12. 16:08
var Array = [1, 2, 3, 4];
var JsonObject = { "JSON" : Array };

JsonObject는 명백히 말하면 자바스크립트 오브젝트이지, JSON 형식이 아닙니다.
다음은 개발자 도구로 확인해본 JsonObject변수에 담긴 오브젝트 정보입니다.

출력결과

JsonObject
  1. Object {JSONArray[4]}
    1. JSONArray[4]
      1. 01
      2. 12
      3. 23
      4. 34
      5. length4
      6. __proto__Array[0]
    2. __proto__Object


출력결과에서도 확인할 수 있듯이 이 객체의 prototype은 Object형입니다.
이를 JSON 타입으로 변경하여 웹서버와 통신을 하고자 할때 
JSON.stringify(JsonObject) 를 사용하면 JSON 형식에 맞게끔 변환을 해줍니다.
물론 form을 사용하여 파라미터로 전송할 경우 이렇게 할 필요는 없지만, 직접 JSON을 만들어 사용하는 경우만 이렇게 하시면 될 것 같습니다.
변환된 결과는 아래와 같습니다.

출력결과
"{"JSON":[1,2,3,4]}"


따라서 이러한 JSON 형식의 String을 자바에서는 JSON 오브젝트로 만들어 사용해야 하는데, 다양한 방법 중 하나가 ObjectMapper를 사용하는 방법입니다.
ObjectMapper와 TypeReference는 jackson 라이브러리에 포함되어 있기 때문에, 사용하실 분들은 라이브러리를 추가해주셔야겠습니다.

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

ObjectMapper mapper = new ObjectMapper();
ObjectMapper mapper = new ObjectMapper();
ArrayList<Integer> list = mapper.readValue((String)hashmapParam.get("JSON"), 
							new TypeReference<ArrayList<Integer>>() {});

위의 코드는 전달받은 객체(JSON)를 HashMap에서 꺼내서 이를 스트링으로 변환한 뒤, TypeReference를 통해서 ArrayList<Integer> 형태로 변환하고 있습니다.

넘어온 객체는 Object 타입이기 때문에 원래의 형태인 String으로 형변환을 해주었습니다.
stringify를 하면 String 형태로 변환되는줄 모르고, 하루나 까먹었네요.

콘솔에서 String cannot casting List... 에러를 보고 넘어오는 값이 String 인것을 눈치채고 이를 해결할 방법을 찾아봤네요.
앞으로 열심히 삽입하다보면 실력이 늘을날이 오겠죠... 

Comments