Spring/3.x

[jackson] ObjectMapper를 이용하여 java object를 json 문자열로 변환하기

EnterKey 2016. 5. 17. 17:35
반응형

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 등 ) 

#TypeReference를 이용한 방법

 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로된 리스트나 모두 아래와 같이 하면 된다. 

jsonString = mapper.writeValueAsString(userObject);




3. 변환시 맵핑되는 JSON과 Java Type 


JSON Type

Java Type

object

LinkedHashMap<String,Object>

array

ArrayList<Object>

string

String

number (no fraction)

IntegerLong 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

반응형