jackson的基本操作

来源:互联网 发布:萨维尔街 知乎 编辑:程序博客网 时间:2024/06/04 23:57

将jackson的json与bean转化 简化成只需要调用方法操作。目前用着蛮顺手的,以后有优化了再更新。

简化后的调用:

Map<String, Object> map = new HashMap<String,Object>();// 将对象转换成json字符串String json = JSONUtil.parseJSONString(map);// json解析为bean对象map = JSONUtil.parseBean(json, new HashMap<String,Object>());

代码:

import java.io.IOException;import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonParseException;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.JsonMappingException;import com.fasterxml.jackson.databind.JsonSerializer;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializerProvider;import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;import com.fasterxml.jackson.databind.node.ArrayNode;import com.fasterxml.jackson.databind.node.ObjectNode;/** * 对jackson进行基本封装<br> * 1、拒绝null。本类方法的返回值不存在null,而为""或new对象<br> * 2、不引用jdk、jackson以外的包 *  * @author zjw # Administrator * @version 1.0 * */public class JSONUtil {private static ObjectMapper mapper = new ObjectMapper();private static JsonSerializer<Object> jsonSerializerDefault;private static JsonSerializer<Object> jsonSerializer;private JSONUtil() {}public static ObjectMapper getObjectMapper() {return mapper;}public static String parseJSONString(Object obj) {try {return mapper.writeValueAsString(obj);} catch (JsonProcessingException e) {e.printStackTrace();}return "";}/** * 将json字符串解析为指定类型bean对象 * 当bean对象不存在该值时,解析终止(jackson的内部逻辑) *  * @param jsonString * @param object * @return * @creation 2017年5月3日 */public static <T> T parseBean(String jsonString, T object) {try {return mapper.readerForUpdating(object).readValue(jsonString);} catch (UnrecognizedPropertyException e) {e.printStackTrace();} catch (JsonProcessingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return object;}/** * 读取json字符串到ObjectNode,以便修改 *  * @param jsonString * @return * @creation 2017年5月3日 */public static ObjectNode getObjectNode(String jsonString) {try {ObjectNode objectNode = mapper.readValue(jsonString, ObjectNode.class);return objectNode;} catch (JsonParseException e) {e.printStackTrace();} catch (JsonMappingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return mapper.createObjectNode();}/** * 读取json字符串到ArrayNode,以便修改 *  * @param jsonString * @return * @creation 2017年5月3日 */public static ArrayNode getArrayNode(String jsonString) {try {ArrayNode objectNode = mapper.readValue(jsonString, ArrayNode.class);return objectNode;} catch (JsonParseException e) {e.printStackTrace();} catch (JsonMappingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return mapper.createArrayNode();}/** * 修改ObjectNode里的值,即使不存在也不会追加 * @param node * @param key * @param value * @return * @creation 2017年5月3日 */public static ObjectNode updateJson(ObjectNode node,String key,Object value){return node.get(key) != null? node.putPOJO(key,value) : node;}/** * 设置没有null值的mapper对象。 * 对于bean对象,null值直接被忽视; * 对于map、list对象,null将被视作""。 *  * @creation 2017年5月3日 */public static void setNotEmpty() {if (jsonSerializerDefault == null) {jsonSerializerDefault = mapper.getSerializerProvider().getDefaultNullValueSerializer();}if (jsonSerializer == null) {jsonSerializer = new JsonSerializer<Object>() {@Overridepublic void serialize(Object value, JsonGenerator jgen,SerializerProvider provider) throws IOException,JsonProcessingException {jgen.writeString("");}};}mapper.setSerializationInclusion(Include.NON_NULL);mapper.getSerializerProvider().setNullValueSerializer(jsonSerializer);}/** * 还原默认的null处理 *  * @creation 2017年5月3日 */public static void setDefaultEmpty() {if (jsonSerializerDefault != null)mapper.getSerializerProvider().setNullValueSerializer(jsonSerializerDefault);mapper.setSerializationInclusion(Include.ALWAYS);}}
调用示例

public static void main(String[] args) throws JsonProcessingException, IOException {Map<String, Object> map = new HashMap<String,Object>();List<String> list = new ArrayList<String>();map.put("a",1);map.put("b",2);map.put("c",3);map.put("d",null);list.add("abcde");map.put("e",list);// 不允许nullJSONUtil.setNotEmpty();System.out.println(JSONUtil.parseJSONString(map));// 允许nullJSONUtil.setDefaultEmpty();// 将对象转换成json字符串String json = JSONUtil.parseJSONString(map);System.out.println(json);// json解析为bean对象map = JSONUtil.parseBean(json, new HashMap<String,Object>());System.out.println(map);// 修改值ObjectNode node = JSONUtil.getObjectNode(json);JSONUtil.updateJson(node, "a", 666);JSONUtil.updateJson(node, "2", 2333);System.out.println(node);// put值不存在时,将 修改操作 视为 存放node.putPOJO("2", 2333);System.out.println(node);}


原创粉丝点击