-
JAVA JSON 라이브러리 Jackson 사용법JAVA 2013. 5. 22. 14:50
참조 :
1. http://jackson.codehaus.org/
2. http://wiki.fasterxml.com/JacksonInFiveMinutes
라이브러리 다운로드
http://wiki.fasterxml.com/JacksonDownload
jackson-core, jackson-databind, jackson-annotations 를 다운 받음.
Jackson 에서 JSON 처리에 제공하는 방법
1. Streaming API
성능이 빠름.
2. Tree Model
일반적인 XML처럼 노드형태로 Json 데이터를 다룸. 유연성이 가장 좋음. 입맛대로 구성할 수 있음.
3. Data Binding
POJO 기반의 가자 객체들을 JSON으로 변환함.
-Simple data Binding : 자바클래스 내의 Map, List, String, 숫자형, Boolean, null 형의 데이터들을 JSON으로 변환함.
-Full data binding : Simple data Binding에서 제공하는것들을 포함하고 자바 빈타입에서 제공하는 데이터들도 JSON으로 변환함.
소스
* 공식사이트에 있는 import 패키지 이름이 버전업되면서 변경됐음.(2013-05-22)
import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; public class testJacksonJSON { /** * @param args */ public static void main(String[] args) { try { ObjectMapper mapper = new ObjectMapper(); // 재사용 가능하고 전체코드에서 공유함. String user_json = "{\"name\" : { \"first\" : \"Joe\", \"last\" : \"Sixpack\" }, " + " \"gender\" : \"MALE\", " + " \"verified\" : false, " + " \"userImage\" : \"Rm9vYmFyIQ==\" " + " } "; User user = mapper.readValue(user_json, User.class); System.out.println("First name : " + user.getName().getFirst()); System.out.println("Last name : " + user.getName().getLast()); System.out.println("Gender : " + user.getGender()); System.out.println("Verified : " + user.isVerified()); user.getName().setFirst("ChangeJoe"); user.getName().setLast("ChangeSixpack"); String jsonStr = mapper.writeValueAsString(user); System.out.println("Simple Binding : "+jsonStr); //직접 raw 데이터를 입력해서 JSON형태로 출력하는 방법. Map
userData = new HashMap (); Map nameStruct = new HashMap (); nameStruct.put("first", "RawJoe"); nameStruct.put("last", "Sixpack"); userData.put("name", nameStruct); userData.put("gender", "MALE"); userData.put("verified", Boolean.FALSE); userData.put("userImage", "Rm9vYmFyIQ=="); jsonStr = mapper.writeValueAsString(userData); System.out.println("Raw Data : "+jsonStr); //Tree 모델 예제 ObjectMapper m = new ObjectMapper(); // mapper.readTree(source), mapper.readValue(source, JsonNode.class); 둘중 하나 사용가능. JsonNode rootNode = m.readTree(user_json); JsonNode nameNode = rootNode.path("name"); String lastName = nameNode.path("last").textValue(); ((ObjectNode)nameNode).put("last", "inputLast"); jsonStr = m.writeValueAsString(rootNode); System.out.println("Tree Model : "+jsonStr); //Streaming API 예제 JsonFactory f = new JsonFactory(); OutputStream outStr = System.out; JsonGenerator g = f.createJsonGenerator(outStr); g.writeStartObject(); g.writeObjectFieldStart("name"); g.writeStringField("first", "StreamAPIFirst"); g.writeStringField("last", "Sixpack"); g.writeEndObject(); // 'name' 필드용. g.writeStringField("gender", "MALE"); g.writeBooleanField("verified", false); g.writeFieldName("userImage"); g.writeEndObject(); g.close(); // 사용한 다음 close해줘서 output에 있는 내용들을 flush해야함. } catch (JsonParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class User { public enum Gender { MALE, FEMALE }; public static class Name { private String _first, _last; public String getFirst() { return _first; } public String getLast() { return _last; } public void setFirst(String s) { _first = s; } public void setLast(String s) { _last = s; } } private Gender _gender; private Name _name; private boolean _isVerified; private byte[] _userImage; public Name getName() { return _name; } public boolean isVerified() { return _isVerified; } public Gender getGender() { return _gender; } public byte[] getUserImage() { return _userImage; } public void setName(Name n) { _name = n; } public void setVerified(boolean b) { _isVerified = b; } public void setGender(Gender g) { _gender = g; } public void setUserImage(byte[] b) { _userImage = b; } } 'JAVA' 카테고리의 다른 글
인텔리J 에서 스프링 MVC, 하이버네이트, JSON 사용하기 (0) 2014.05.12 간단한 자바 통계 프로그램. (0) 2013.05.07 댓글