[jackson] ObjectMapper를 이용하여 java object를 json 문자열로 변환하기
Jackson은 json을 처리하는 3가지 방법을 제공하는데, 여기서는 간단하게 Data Binding 방법을 소개한다.
1. json 데이터를 java object로 변경하기
* json data
{ "name" : { "first" : "Joe", "last" : "Sixpack" }, "gender" : "MALE", "verified" : false, "userImage" : "Rm9vYmFyIQ==" }
* User클래스
public 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; } }
1-1. 단순 object로 변경하기
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
User user = mapper.readValue(new File("user.json"), User.class);
1-2. Generic등으로 변경하기 ( Map, 또는 ArrayList 등 )
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
1-3. Gson에서는
#Type을 이용한 방법 ( gson )
Type collectionType = new TypeToken<Collection<Event>>(){}.getType();
Collection<Event> eventArray = gson.fromJson(array.get(3), collectionType);
2. java object를 json data로 변경하기
simple 객체나 generics로된 리스트나 모두 아래와 같이 하면 된다.
3. 변환시 맵핑되는 JSON과 Java Type
JSON Type | Java Type |
object | LinkedHashMap<String,Object> |
array | ArrayList<Object> |
string | String |
number (no fraction) | Integer, Long or BigInteger (smallest applicable) |
number (fraction) | Double (configurable to use BigDecimal) |
true|false | Boolean |
null | null |
참고 : http://wiki.fasterxml.com/JacksonInFiveMinutes
출처: http://hanburn.tistory.com/99