'Jackson'에 해당되는 글 3건

  1. 2017.09.13 JSON 문자열을 Map 으로 변환하기(Jackson 사용)
  2. 2011.08.19 Java JSON 처리 라이브러리 Jackson JSON Processor #2 : Map, List <--> JSON String 상호변환 1
  3. 2011.08.12 Java JSON 처리 라이브러리 Jackson JSON Processor #1 : Map, List 를 JSON String으로~ 5

JSON 문자열을 Map 으로 변환하기(Jackson 사용)


https://gturnquist-quoters.cfapps.io/api/random 여기에 있는 JSON을 읽어서 Map 으로 변환하고 이것저것 더 해보기


브라우저에서 위 URL 로 접속해 보면 JSON 문자열을 다음과 같다.

{
   type: "success",
   value: {
      id: 10,
      quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
   }
}



요것을 처리하는 예제 코드

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonTest {
	public static void main(String[] args)
            throws JsonParseException, JsonMappingException, MalformedURLException, IOException {

        ObjectMapper mapper = new ObjectMapper();

        // URL 에 있는 JSON String 을 Map으로 변환하기
        Map<String, Object> data = mapper.readValue(
                     new URL("https://gturnquist-quoters.cfapps.io/api/random"), 
                     new TypeReference<Map<String,Object>>(){});




        // {type=success, value={id=9, quote=So easy it is to switch container in #springboot.}}
        System.out.println(data);

        // {id=9, quote=So easy it is to switch container in #springboot.}
        System.out.println(data.get("value"));






        // Map을 JSON String 으로 변환
        // {"type":"success","value":{"id":9,"quote":"So easy it is to switch container in #springboot."}}
        System.out.println(mapper.writeValueAsString(data));


        // Map을 보기쉬운 JSON String 으로 변환
        /*
           {
              "type" : "success",
              "value" : {
                "id" : 9,
                "quote" : "So easy it is to switch container in #springboot."
              }
           }
        */
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(data));
    }
}


Java JSON 처리 라이브러리 Jackson JSON Processor #2 : Map, List <--> JSON String 상호변환

JSON 문자열을 Map 이나 List Object 로 변환하는 것이랑

JSON 문자열을 xml 다루듯이 트래버싱 하는것,

Map 이나 List Object 를 JSON 문자열로 변환하는것  요래 정리를 해 보았다.

뭐 요정도만 알면 대충 할 수 있는건 다 할 수 있을듯하다. 뭐 필요하면 더 그때가서 더 찾아보면 되긋지~
package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// 테스트 데이터 : 맵에 string 2개랑 list 하나가 들어가 있는 형태
		List<String> list = new ArrayList<String>();
		list.add("list1");
		list.add("list2");
		list.add("list3");

		Map<String, Object> d = new HashMap<String, Object>();
		d.put("list", list);
		d.put("a", "va");
		d.put("b", "vb");
		////////////////////////////////////////////////
		
		
		
		ObjectMapper om = new ObjectMapper();
		
		// Map or List Object 를 JSON 문자열로 변환
		String jsonStr = om.writeValueAsString(d);
		System.out.println("object to json : " + jsonStr);

		
		// JSON 문자열을 Map or List Object 로 변환
		Map<String, Object> m = om.readValue(jsonStr, new TypeReference<Map<String, Object>>(){});
		System.out.println("json to object : " + m);
		
		
		// JSON 문자열을 xml 다루는것과 비슷하게 트리로 맨들어서 트래버싱하기(Tree Model)
		JsonNode root = om.readTree(jsonStr);
		
		// 단일값 가져오기
		System.out.println("b의 값 : " + root.path("b").getValueAsText());
		
		// 배열에 있는 값들 가져오기
		if( root.path("list").isArray() ){
			Iterator<jsonnode> it = root.path("list").iterator();
			
			// 요래 해도 됨
			// Iterator<jsonnode> it = root.path("list").getElements()
			while(it.hasNext()){
				System.out.println(it.next().getTextValue());
			}
		}
		
		// 이외 getXXXValue() 시리즈, findParent(), findValue() 등등 유용한 함수 많음~
	}
}

Test.java


Java JSON 처리 라이브러리 Jackson JSON Processor #1 : Map, List 를 JSON String으로~

Java 에서 JSON 을 처리하기 위한 라이브러리는 많이 있겠지만 요즘은 사람들이 Jackson 라이브러리를 많이 쓰는것 같다.

프로젝트 홈페이지(http://jackson.codehaus.org/)에 가보면 "High-performance JSON processor!" 요런 문구가 제일 상단에 떡 있는걸 봐서는 성능도 좋은것 같다!  

일단 그냥 써보자. 계속 쓰다보면 잘 알게 된다.

먼저 라이브러리를 써묵기 위해서 jar 파일을 받아야 한다. 프로젝트 홈페이지 다운로드 메뉴(http://wiki.fasterxml.com/JacksonDownload)로 가서  

쭉 있는것들중에 core-aslmapper-asl 을 다운로드 받아 클래스 패스가 참조하는 폴더에 복사해 주면된다.

웹 프로젝트 같은 경우 WEB-INF/lib 디렉토리에 복사하면 되긋다~

메이븐 프로젝트일 경우는 간단히  pom.xml 에
<dependency>
	<groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-mapper-asl</artifactId>
	<version>1.8.5</version>
</dependency>
를 추가해 주면 사용할 수 있다.

지금 현재 최신 버전이 1.8.5 이기 때문에 version 란에다 1.8.5를 적어준 것이고 나중에 또 업데이트가 될것이니

 http://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl 여기에서 확인해 보고 최신버전으로 바꿔주면 될것이다.


간단한 샘플을 보자.
// 맵에 데이터들이 들어가 있는 형태
Map dummyData1 = new HashMap();
dummyData1.put("value1", "값1");
dummyData1.put("value2", "값2");

ObjectMapper om = new ObjectMapper();

try {	
	System.out.println(om.defaultPrettyPrintingWriter().writeValueAsString(dummyData1));
} catch (JsonGenerationException e) {	
	e.printStackTrace();
} catch (JsonMappingException e) {	
	e.printStackTrace();
} catch (IOException e) {	
	e.printStackTrace();
}
출력결과
{  "value1" : "값1",  "value2" : "값2"}
Jackson 라이브러리로 하는 짓들의 대부분은 ObjectMapper 라는 클래스의 인스턴스 생성을 한다음에 한다.

생성된 고것을 가지고 Json 문자열을 객체로 변환한다던가 객체를 JSON 문자열로 변환한다던가 한다. 뭐 다른 쓸만한 것도 많을 것이다.
뭐 아직 많이 모르니깐~

아무튼 Map 이나 List에 들어가 있는 데이터들을 쪽바로 잘 변환해 준다.

물론 getter 와 setter 메소드 시리즈가 있는 도메인 오브젝트,
예를 들어 User, Account 뭐 이런 종류의 오브젝트도 writeValueAsString 메소드의 파라메터로 넣으면 잘 변환된다.


아무튼~ 각설하고~ List 인 경우도 한번 해보자

// List 에 맵이 들어가 있는 형태
List dummyData2 = new ArrayList();
Map m = new HashMap();
m.put("value1", "값1");
m.put("value2", "값2");
dummyData2.add(m);

m = new HashMap();
m.put("value1", "값3");
m.put("value2", "값4");
dummyData2.add(m);

ObjectMapper om = new ObjectMapper();

try {	
	System.out.println(om.defaultPrettyPrintingWriter().writeValueAsString(dummyData2));
} catch (JsonGenerationException e) {	
	e.printStackTrace();
} catch (JsonMappingException e) {	
	e.printStackTrace();
} catch (IOException e) {	
	e.printStackTrace();
}
출력결과
[ {  "value1" : "값1",  "value2" : "값2"}, {  "value1" : "값3",  "value2" : "값4"} ]
역시 기대했던 대로 잘 변환된다. 

위의 샘플들은 오브젝트를 String으로 변환하는 샘플이고 String 으로 변환활 필요가 없으면(웹요청처리, JSON 파일로 저장하는 경우)  ObjectMapper 클래스의 writeValue() 메소드를 이용해 OutputStream이나 Writer 에 Stream으로 출력해 버려도 된다.
ObjectMapper om = new ObjectMapper();

om.writeValue(response.getWriter(), dummyData);
prev 1 next