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

개발 2011. 12. 27. 10:40

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

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)

Integer, Long or BigInteger (smallest applicable)

number (fraction)

Double (configurable to use BigDecimal)

true|false

Boolean

null

null




참고 : http://wiki.fasterxml.com/JacksonInFiveMinutes


: