`
hsyzijvaa
  • 浏览: 111789 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

利用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<string>这种简单类型时使用如下语句:	 * list<mybean> beanlist = binder.getmapper().readvalue(liststring, new typereference<list<mybean>>() {});	 */	public <t> t fromjson(string jsonstring, class<t> 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<string, object> 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<string>		list<string> stringlist = lists.newarraylist("a", "b", "c");		string liststring = binder.tojson(stringlist);		system.out.println("string list:" + liststring);		assertequals("[\"a\",\"b\",\"c\"]", liststring);		//list<bean>		list<testbean> 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<string, object> map = binder.fromjson(mapstring, hashmap.class);		system.out.println("map:");		for (entry<string, object> entry : map.entryset()) {			system.out.println(entry.getkey() + " " + entry.getvalue());		}		//list<string>		string liststring = "[\"a\",\"b\",\"c\"]";		list<string> stringlist = binder.getmapper().readvalue(liststring, list.class);		system.out.println("string list:");		for (string element : stringlist) {			system.out.println(element);		}		//list<bean>		string beanliststring = "[{\"name\":\"a\"},{\"name\":\"b\"}]";		list<testbean> beanlist = binder.getmapper().readvalue(beanliststring, new typereference<list<testbean>>() {		});		system.out.println("bean list:");		for (testbean element : beanlist) {			system.out.println(element);		}	}


在我的实际项目中,遇到一个有意思的问题,我把一个对象转为为json字符串时,调用binder.tojson(bean) ,这个方法,方法总是返回null,后面发现该bean中没有默认的构造函数,加上某人构造函数就ok了。
 
0
0
分享到:
评论

相关推荐

    net.sf.json.JSONObject实现Object对象与Json字符串的互转

    在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛用于前后端数据传输。`net.sf.json.JSONObject`是开源库Apache Commons Lang中的一个类,它提供了解决Java对象与JSON字符串...

    json 转化工具类

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端数据传输。...在实际开发中,根据项目的依赖和需求,选择合适的JSON库并利用其提供的工具类,可以有效地处理JSON数据。

    json和java互转测试项目

    例如,一个`List&lt;User&gt;`可以通过`JSONArray.fromObject()`转换成JSON数组,然后用`JSONArray.toArray()`还原。 5. **错误处理**:在转换过程中,可能会遇到类型不匹配或其他错误,需要适当地捕获并处理`...

    json-lib-2.4(2013.6.13前最新版本)选定版

    这个版本提供了对JSON对象与Java对象之间相互转换的功能,使得开发者可以轻松地在JSON字符串和Java的Map、List、数组等数据结构间进行操作。它支持多种JVM环境,包括JDK1.5,这从压缩包中的`json-lib-2.4-jdk15.jar`...

    json-lib-2.4JAR包

    4. **支持多种类型的数据**:json-lib可以处理包括基本类型、数组、列表、Map、日期、枚举等多种Java数据类型,并能自动处理它们的JSON表示。 5. **性能优化**:考虑到性能,json-lib在设计时进行了优化,能够高效...

    Json对象转换

    Jackson可以处理数组、列表、Map和其他复杂类型的转换。例如,如果`User`类有一个`List&lt;Address&gt;`字段,只需确保`Address`类也有相应的getter和setter。 5. **使用`@JsonProperty`和`@JsonPropertyAnnotation`**:...

    jackson2.2.3

    通过在Java类和字段上添加注解,开发者可以指定哪些字段应被包括或排除,如何处理日期、枚举等复杂类型,以及如何处理循环引用等问题。常见的注解有`@JsonProperty`、`@JsonIgnore`、`@JsonInclude`、`@JsonFormat`...

    json-lib-2.4-jdk15.jar

    1. **JSON到Java对象转换**:`json-lib`允许开发者将JSON字符串解析为Java对象,如Map、List、数组等。这通常通过`JSONArray`和`JSONObject`类实现。 2. **Java对象到JSON转换**:同样,它也可以将Java对象转化为...

    Json-lib-2.4.jdk15.jar

    1. **JSON到Java对象的序列化**:Json-lib可以将JSON格式的数据解析为Java对象,如Map、List、数组、自定义类等,这样开发者可以方便地处理JSON数据。 2. **Java对象到JSON的反序列化**:同样,Json-lib也可以将...

    FastJson应用案例.txt

    2. **兼容性好**:FastJson对Java的各种数据类型都有良好的支持,包括Class、Collection、Map、Date、Enum等常见的Java数据类型。 3. **简单易用**:提供了一套简洁的API接口,便于开发者快速上手并实现JSON数据的...

    jackson的jar包

    3. **类型绑定**: Jackson支持多种复杂的类型转换,如日期、枚举、自定义类型等。例如,使用`@JsonFormat`可以指定日期格式,`@JsonDeserialize`和`@JsonSerialize`可以自定义序列化和反序列化逻辑。 4. **集合和...

    json要导的jar包

    4. Fastjson:阿里巴巴开发的高性能的JSON库,支持Java Bean、Map、List等类型的JSON转换,提供了极简的API,性能优秀,适用于对速度有高要求的场景。 这些JAR包的使用通常涉及到以下步骤: 1. 将所需的JAR文件添加...

    快速json处理 fastjson-1.2.13

    - 从字符串解析为Java对象:Fastjson提供`JSON.parseObject()`方法,可以将JSON字符串转换成Java对象,如Map、List或自定义类实例。 - 从JSON流解析:支持从InputStream、Reader等输入流解析JSON数据。 2. **...

    fastjson jar包 和 api

    2. **集合与JSON数组的转换**:Fastjson支持List、Map等集合与JSON数组之间的转换,例如`parseArray(String jsonString, Class&lt;T&gt; clazz)`用于将JSON数组解析为Java集合,`JSONArray.toJSONArray(List&lt;T&gt; list)`则...

    fastjson使用

    - `JSONObject.parseObject(String jsonString, Map, Object&gt; map)`:将JSON字符串解析为Map对象。 - `JSONObject.toJSONString(Map, Object&gt; map)`:将Map对象转换为JSON字符串。 4. **自定义转换规则** - ...

    josn 各种转换

    Jackson支持嵌套的JSON对象和数组,对应的Java对象可以是复杂的类结构,包括List、Map以及其他Java集合。 5. 避免无限递归 在处理包含相互引用的对象时,可能会导致无限递归。可以使用`@JsonIdentityInfo`注解解决...

    浅谈fastjson的常用使用方法

    2. 强大:它能够支持任意的JavaBean以及包括集合、Map、日期和枚举等类的序列化和反序列化。 3. 零依赖:除了JDK,它不依赖其他任何类库。 在Fastjson中常用的几个类及其用途如下: - `JSON`:这是Fastjson中的...

    20个常用的ava程序片段.doc

    - `List`、`Set`和`Map`是Java集合框架的重要部分,它们提供了丰富的操作方法,如`add`、`remove`、`contains`等。 12. **泛型**: - 泛型允许在编译时检查类型安全性,如`List&lt;String&gt;`声明一个只包含字符串的...

    Vue请求java服务端并返回数据代码实例

    在现代Web应用开发中,前端框架...同时,Java服务端可能会使用更复杂的对象模型,以及使用如Jackson或Gson库来自动序列化和反序列化JSON数据。理解这一基础交互流程,对于开发Vue.js与Java服务端结合的应用至关重要。

Global site tag (gtag.js) - Google Analytics