package com.github.ltsopensource.core.json.jackson;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.ltsopensource.core.json.*;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Robert HG (254963746@qq.com) on 11/20/15.
*/
public class JacksonJSONAdapter implements JSONAdapter {
private ObjectMapper mapper;
public JacksonJSONAdapter() {
mapper = new ObjectMapper();
// 忽略多余的字段
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 不输出为空的字段
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
@Override
public String getName() {
return "jackson";
}
@Override
public <T> T parse(String json, Type type) {
try {
return mapper.readValue(json, mapper.getTypeFactory().constructType(type));
} catch (IOException e) {
throw new JSONException(e);
}
}
@Override
public String toJSONString(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new JSONException(e);
}
}
@Override
public JSONObject toJSONObject(Object obj) {
Map<String, Object> map = mapper.convertValue(obj, new com.fasterxml.jackson.core.type.TypeReference<HashMap<String, Object>>() {
});
return new JacksonJSONObject(map);
}
@Override
public JSONArray toJSONArray(Object obj) {
List<Object> list = mapper.convertValue(obj, new com.fasterxml.jackson.core.type.TypeReference<List<Object>>() {
});
return new JacksonJSONArray(list);
}
@Override
public JSONArray parseArray(String json) {
List<Object> list = parse(json, new TypeReference<List<Object>>() {
}.getType());
return new JacksonJSONArray(list);
}
@Override
public JSONObject parseObject(String json) {
Map<String, Object> map = parse(json, new TypeReference<Map<String, Object>>() {
}.getType());
return new JacksonJSONObject(map);
}
@Override
public JSONObject newJSONObject() {
return new JacksonJSONObject();
}
@Override
public JSONObject newJSONObject(Map<String, Object> map) {
return new JacksonJSONObject(map);
}
@Override
public JSONObject newJSONObject(int initialCapacity) {
return new JacksonJSONObject(initialCapacity);
}
@Override
public JSONArray newJSONArray() {
return new JacksonJSONArray();
}
@Override
public JSONArray newJSONArray(List<Object> list) {
return new JacksonJSONArray(list);
}
@Override
public JSONArray newJSONArray(int initialCapacity) {
return new JacksonJSONArray(initialCapacity);
}
}