利用jackson对object,map,list,数组,枚举,日期类等转化为json -买球官网平台

`
zhangyou1010
  • 浏览: 285607 次
  • 性别:
  • 来自: 北京
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 304)
    • ( 88)
    存档分类
    最新评论

    利用jackson对object,map,list,数组,枚举,日期类等转化为json

      博客分类:
    • java
    利用jackson中的objectmapper对象,转为对象为json字符串,springside对jackson的简单封装 jsonbinder :
    public class jsonbinder {
    	private static logger logger = loggerfactory.getlogger(jsonbinder.class);
    	private objectmapper mapper;
    	public jsonbinder(inclusion inclusion) {
    		mapper = new objectmapper();
    		//设置输出包含的属性
    		mapper.getserializationconfig().setserializationinclusion(inclusion);
    		//设置输入时忽略json字符串中存在而java对象实际没有的属性
    		mapper.getdeserializationconfig().set(
    				org.codehaus.jackson.map.deserializationconfig.feature.fail_on_unknown_properties, false);
    	}
    	/**
    	 * 创建输出全部属性到json字符串的binder.
    	 */
    	public static jsonbinder buildnormalbinder() {
    		return new jsonbinder(inclusion.always);
    	}
    	/**
    	 * 创建只输出非空属性到json字符串的binder.
    	 */
    	public static jsonbinder buildnonnullbinder() {
    		return new jsonbinder(inclusion.non_null);
    	}
    	/**
    	 * 创建只输出初始值被改变的属性到json字符串的binder.
    	 */
    	public static jsonbinder buildnondefaultbinder() {
    		return new jsonbinder(inclusion.non_default);
    	}
    	/**
    	 * 如果json字符串为null或"null"字符串,返回null.
    	 * 如果json字符串为"[]",返回空集合.
    	 * 
    	 * 如需读取集合如list/map,且不是list这种简单类型时使用如下语句:
    	 * list beanlist = binder.getmapper().readvalue(liststring, new typereference>() {});
    	 */
    	public  t fromjson(string jsonstring, class clazz) {
    		if (stringutils.isempty(jsonstring)) {
    			return null;
    		}
    		try {
    			return mapper.readvalue(jsonstring, clazz);
    		} catch (ioexception e) {
    			logger.warn("parse json string error:"   jsonstring, e);
    			return null;
    		}
    	}
    	/**
    	 * 如果对象为null,返回"null".
    	 * 如果集合为空集合,返回"[]".
    	 */
    	public string tojson(object object) {
    		try {
    			return mapper.writevalueasstring(object);
    		} catch (ioexception e) {
    			logger.warn("write to json string error:"   object, e);
    			return null;
    		}
    	}
    	/**
    	 * 设置转换日期类型的format pattern,如果不设置默认打印timestamp毫秒数.
    	 */
    	public void setdateformat(string pattern) {
    		if (stringutils.isnotblank(pattern)) {
    			dateformat df = new simpledateformat(pattern);
    			mapper.getserializationconfig().setdateformat(df);
    			mapper.getdeserializationconfig().setdateformat(df);
    		}
    	}
    	/**
    	 * 取出mapper做进一步的设置或使用其他序列化api.
    	 */
    	public objectmapper getmapper() {
    		return mapper;
    	}
    }


    在其他类中定义jsonbinder对象:
    private static jsonbinder binder = jsonbinder.buildnondefaultbinder();


    以下是对象到json字符串以及json字符串到对象的转化:
    /**
    	 * 序列化对象/集合到json字符串.
    	 */
    	@test
    	public void tojson() throws exception {
    		//bean
    		testbean bean = new testbean("a");
    		string beanstring = binder.tojson(bean);
    		system.out.println("bean:"   beanstring);
    		assertequals("{\"name\":\"a\"}", beanstring);
    		//map
    		map map = maps.newlinkedhashmap();
    		map.put("name", "a");
    		map.put("age", 2);
    		string mapstring = binder.tojson(map);
    		system.out.println("map:"   mapstring);
    		assertequals("{\"name\":\"a\",\"age\":2}", mapstring);
    		//list
    		list stringlist = lists.newarraylist("a", "b", "c");
    		string liststring = binder.tojson(stringlist);
    		system.out.println("string list:"   liststring);
    		assertequals("[\"a\",\"b\",\"c\"]", liststring);
    		//list
    		list beanlist = lists.newarraylist(new testbean("a"), new testbean("b"));
    		string beanliststring = binder.tojson(beanlist);
    		system.out.println("bean list:"   beanliststring);
    		assertequals("[{\"name\":\"a\"},{\"name\":\"b\"}]", beanliststring);
    		//bean[]
    		testbean[] beanarray = new testbean[] { new testbean("a"), new testbean("b") };
    		string beanarraystring = binder.tojson(beanarray);
    		system.out.println("array list:"   beanarraystring);
    		assertequals("[{\"name\":\"a\"},{\"name\":\"b\"}]", beanarraystring);
    	}
    	/**
    	 * 从json字符串反序列化对象/集合.
    	 */
    	@test
    	@suppresswarnings("unchecked")
    	public void fromjson() throws exception {
    		//bean
    		string beanstring = "{\"name\":\"a\"}";
    		testbean bean = binder.fromjson(beanstring, testbean.class);
    		system.out.println("bean:"   bean);
    		//map
    		string mapstring = "{\"name\":\"a\",\"age\":2}";
    		map map = binder.fromjson(mapstring, hashmap.class);
    		system.out.println("map:");
    		for (entry entry : map.entryset()) {
    			system.out.println(entry.getkey()   " "   entry.getvalue());
    		}
    		//list
    		string liststring = "[\"a\",\"b\",\"c\"]";
    		list stringlist = binder.getmapper().readvalue(liststring, list.class);
    		system.out.println("string list:");
    		for (string element : stringlist) {
    			system.out.println(element);
    		}
    		//list
    		string beanliststring = "[{\"name\":\"a\"},{\"name\":\"b\"}]";
    		list beanlist = binder.getmapper().readvalue(beanliststring, new typereference>() {
    		});
    		system.out.println("bean list:");
    		for (testbean element : beanlist) {
    			system.out.println(element);
    		}
    	}


    在我的实际项目中,遇到一个有意思的问题,我把一个对象转为为json字符串时,调用binder.tojson(bean) ,这个方法,方法总是返回null,后面发现该bean中没有默认的构造函数,加上某人构造函数就ok了。
    分享到:
    |
    评论
    3 楼 在世界的中心呼喚愛 2014-05-24  
    不错,找到方法!!
    2 楼 2012-11-20  
    new typereference<>()为什么不能用了呢,是org.codehaus.jackson.type下的类吧
    1 楼 osacar 2012-03-25  
    真是我在找的啊!谢谢了

    相关推荐

      jackson 对象json字符串数组集合互转 各jar包 希望能用到。

      三种方法将object-list-map-array 转成json 数据 并抽取了工具类,可以很方便的设置包含哪些字段,去掉哪些字段; jsonarray/jsonobject fastjson jackson 这三个框架

      jacksonutil.obj2json(方法)的使用,等,不了解的可以留言

      null 博文链接:https://bugyun.iteye.com/blog/2278997

      下面小编就为大家带来一篇jackson将json string转为object,org.json读取json数组的实例,具有很好的参考价值,希望对大家有所帮助

      jackson和json-lib两种方式实现map和json互转,别写出两者实现的区别,并上传了两者的包

      然而通过json实现数据交互成为我们开发中的一部分,进而jackson为我们的json转化提供了很好的机制。下面我将利用实例总结如何使用jackson. 一、准备 如果你需要使用jackson,你必须得导入相应的架包,有如下三个包 ...

      null 博文链接:https://bugyun.iteye.com/blog/2279033

      jackson的jar包,用于转换map与list到json,直接导入即可

      将json转换为map之后,如果数值类型太多会在转换之后出现科学计数法的问题,经研究jackson源码、网上百度资料得知可以通过设置一些参数解决该问题

      jacksondemo.zip,jacksondemo,.project,src,com,bijian,study,deptbean.java,userbean.java,jacksonutil.java,jacksondemo.java,lib,jackson-core-2.4.3.jar,jackson-annotations-2.4.0.jar,jackson-databind-2.4.3....

      jackson json jackson json jackson jsonjackson jsonjackson jsonjackson jsonjackson jsonjackson jsonjackson json

      json 所需要的jackson-annotations-2.4.0.jar,jackson-core-2.4.2.jar, jackson-databind-2.4.2.jar,jackson-mapper-asl-1.9.11.jar

      主要介绍了jackson优雅序列化java枚举类过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

      json格式与java类对象相互转换。json格式转换成java类对象,list,map。类对象转换成json。

      jackson框架解析json,主要讲解了怎样解析bean,list,map,bean>,list<map,bean>>类型的json

      jackson 对象转json,json转对象,json转集合,json转map,jackson忽略字段,等等

      1、jackson使用java类中的getxxx()方法定位生成的json对象的属性xxx和值(返回值),而不是字段; 2、可以通过在java类getxxx()方法前添加注释@jsonignore来忽略该getxxx()方法生成的属性xxx; 3、常用的...

      json的全称是javascript object notation,是一种轻量级的数据交换格式。 json与 xml具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是 json比xml数据传输的有效性要高出很多。 json完全独立与编程...

    global site tag (gtag.js) - google analytics