`
冰魄永峰
  • 浏览: 20129 次
  • 性别: Icon_minigender_1
  • 来自: 徐州
社区版块
存档分类
最新评论

Jackson第一篇【JSON字符串、实体之间的相互转换】

阅读更多

既然你看到这篇文章相信你已经了解JSON的好处了,那么废话不多说直接进入主题。

Jackson是java中众多json处理工具的一个,比起常见的Json-lib,Gson要快一些。

Jackson的官网:http://jackson.codehaus.org/

里面可以下载Jackson的Jar包  注意jackson依赖:Apache的commons-loggin。

下面聊一下Jackson的常见用法==================================

Bean----->JSON

public static String beanToJson(Object obj) throws IOException {
	// 这里异常都未进行处理,而且流的关闭也不规范。开发中请勿这样写,如果发生异常流关闭不了
		ObjectMapper mapper = CommonUtil.getMapperInstance(false);
		StringWriter writer = new StringWriter();
		JsonGenerator gen = new JsonFactory().createJsonGenerator(writer);
		mapper.writeValue(gen, obj);
		gen.close();
		String json = writer.toString();
		writer.close();
		return json;
	}

JSON------>Bean  

	public static Object  jsonToBean(String json, Class<?> cls) throws Exception {
		Object vo = mapper.readValue(json, cls);
		return vo;
	}

 

好了方法写完了咱们测试一下吧 看看他是否支持复杂类型的转换

	public static void main(String[] args) throws Exception {
		// 准备数据
		List<Person> pers = new ArrayList<Person>();
		Person p = new Person("张三", 46);
		pers.add(p);
		p = new Person("李四", 19);
		pers.add(p);
		p = new Person("王二麻子", 23);
		pers.add(p);
		TestVo vo = new TestVo("一个容器而已", pers);
		// 实体转JSON字符串
		String json = beanToJson(vo);
		System.out.println("Bean>>>Json----" + json);
		// 字符串转实体
		TestVo vo2 = (TestVo)jsonToBean(json, TestVo.class);
		System.out.println("Json>>Bean--与开始的对象是否相等:" + vo2.equals(vo));

	}

  输出结果

Bean>>>Json----{"voName":"一个容器而已","pers":[{"name":"张三","age":46},{"name":"李 四","age":19},{"name":"王二麻子","age":23}]}

Json>>Bean--与开始的对象是否相等:true

从结果可以看出从咱们转换的方法是对的,本文只是对Jackson的一个最简单的使用介绍。接下来的几篇文章咱们深入研究一下这玩意到底有多强大!

 

 

下面是本人涉及到的Bean 以及 CommonUtil

 

public class CommonUtil {
	private static ObjectMapper mapper;

	/**
	 * 一个破ObjectMapper而已,你为什么不直接new 还搞的那么复杂。接下来的几篇文章我将和你一起研究这个令人蛋疼的问题
	 * 
	 * @param createNew
	 *          是否创建一个新的Mapper
	 * @return
	 */
	public static synchronized ObjectMapper getMapperInstance(boolean createNew) {
		if (createNew) {
			return new ObjectMapper();
		} else if (mapper == null) {
			mapper = new ObjectMapper();
		}
		return mapper;
	}
}

 

 

public class Person {
	private String name;
	private int age;

	public Person() {
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		Person other = (Person) obj;
		if (age != other.age) {
			return false;
		}
		if (name == null) {
			if (other.name != null) {
				return false;
			}
		} else if (!name.equals(other.name)) {
			return false;
		}
		return true;
	}

}

public class TestVo {
	private String voName;
	private List<Person> pers;

	public TestVo() {
	}

	public TestVo(String voName, List<Person> pers) {
		super();
		this.voName = voName;
		this.pers = pers;
	}

	public String getVoName() {
		return voName;
	}

	public void setVoName(String voName) {
		this.voName = voName;
	}

	public List<Person> getPers() {
		return pers;
	}

	public void setPers(List<Person> pers) {
		this.pers = pers;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		TestVo other = (TestVo) obj;
		if (pers == null) {
			if (other.pers != null) {
				return false;
			}
		} else if (pers.size() != other.pers.size()) {
			return false;
		} else {
			for (int i = 0; i < pers.size(); i++) {
				if (!pers.get(i).equals(other.pers.get(i))) {
					return false;
				}
			}
		}
		if (voName == null) {
			if (other.voName != null) {
				return false;
			}
		} else if (!voName.equals(other.voName)) {
			return false;
		}
		return true;
	}
}

 

 

 

 

 

分享到:
评论
4 楼 liuInsect 2013-03-22  
不知楼主没有么有遇到从JavaBean转化为json的时候 第二次比第一次快很多???
3 楼 shuguang1108 2012-06-01  
楼主,我想请教下:如何实现类似 JSON字符串与List<Person>、Map<Integer,String>、Map<Integer,Person>等集合类型之间的相互转换呢? 急求帮助~
2 楼 shuguang1108 2012-05-31  
万分感谢楼主,刚好项目中遇到JSON->Bean的问题。谢谢分享!!
1 楼 zzzzterrybogard 2012-04-01  
博主你好,托你这个示例的福我解决了问题。但是假如要获取一个字符串,该字符串对应的javaBean属性、层数(3层以内)都不会确定,这也是比较平常的应用。我用json-lib.jar解决了,即返回键值对的数组但不知用jackson如何解决?可以实现么?

相关推荐

    Java和JSON之间的转换(附jar包)

    1. **对象到JSON字符串转换**:使用`ObjectMapper`类,可以将Java对象转换为JSON字符串。 ```java ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(yourJavaObject); ...

    json和对象相互转换

    ##### 4.1 将JSON字符串转换为Java对象 ```java import com.fasterxml.jackson.databind.ObjectMapper; public class JsonToJavaObject { public static void main(String[] args) { String jsonStr = "{\"name\...

    java处理JSON格式数据的通用类

    1. `getObject4JsonString(String jsonString, Class pojoCalss)`:此方法接收一个JSON字符串和一个Java类的Class对象,然后使用`JSONObject.fromObject()`将JSON字符串转换为对应的Java对象(POJO,Plain Old Java ...

    基于json数据交互Android客户端与服务器端

    2. 请求响应处理:服务器返回的数据通常也是JSON格式,通过诸如Gson、Jackson或org.json库解析JSON字符串为Java对象,便于进一步处理。 3. 异步处理:由于Android主线程不能执行耗时操作,因此网络请求通常在...

    java中实体类转Json的2种方法

    本文将介绍两种Java中实体类转换为Json字符串的方法,这两种方法分别依赖于不同的库,其一利用了Jackson库,其二利用了ezmorph库。 首先,要实现这一功能,我们需要定义一个实体类。在本文中,实体类被命名为Emp,...

    jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)

    针对这个问题,本文将介绍两种方法,可以使得在使用Jackson进行序列化时,实体对象的属性值为null时,该属性不会被包含在生成的JSON字符串中。 首先,我们可以使用注解@JsonInclude来指定哪些属性需要被序列化。这...

    Android利用Json来进行网络数据传输

    `Gson`类的`fromJson`方法可以将JSON字符串转换为指定类型的Java对象。这里使用了泛型和`TypeToken`来动态解析JSON到`LinkedList&lt;Student&gt;`。`Student`类是一个简单的JavaBean,包含了属性和对应的getter、setter...

    关于Java跨域Json字符转类对象的方法示例

    一旦实体类创建完成,就可以使用相应的JSON解析库提供的方法将JSON字符串转换为实体类对象。例如,如果使用json-simple,可以创建一个JSONObject实例,并使用其相关方法从JSON字符串中解析出数据,然后映射到Java...

    服务器端返回json数据

    然后,通过JSON库(如Gson、Jackson或org.json)将Java对象转换成JSON字符串。 2. **配置Web服务**:在Tomcat服务器上,开发者通常会创建一个Servlet或RESTful API来处理客户端请求。这些服务会根据HTTP请求的方法...

    使用JSON插件实现JSON类型的Result

    这里我们使用了`org.json.JSONObject`(注意:实际开发中可能需要导入第三方库,如Gson或Jackson),创建了一个JSON对象并填充了数据。然后设置HTTP响应的Content-Type为`application/json`,确保浏览器理解返回的...

    android 常用(json url findbyid)实体类生成工具)

    Android提供了`org.json`库来解析和生成`json`字符串,也可以使用第三方库如Gson或Jackson进行更高效、更便捷的转换。 其次,`URL`(Uniform Resource Locator)是统一资源定位符,是互联网上的资源地址。在Android...

    Head.javaHead.javaHead.java

    例如,`JsonDataEncoder`可能会使用Jackson或Gson库将`JsonData`实例转化为JSON字符串,然后再将字符串转换为字节数组。 2. **包的组装**:在Netty中,你可以定义自定义的`ChannelHandler`来处理编码过程。这些...

    浅谈JAVA中JSON的应用——以天气预报数据接口为例.pdf

    最后,我们可以使用Java编写类和方法,获取网络资源的方式下载天气预报JSON字符串数据,然后调用Google-Gson类库的类来解释JSON数据,并将解释后的数据全部存入之前准备好的JAVA数据实体类中,最后访问JAVA数据实体...

    Java中JSON处理工具类使用详解

    1. 对象转JSON字符串(toJSONString):在Java中,我们可以使用Fastjson的toJSONString方法来将一个Java对象转换成JSON字符串。这在需要将Java对象序列化为JSON格式供前端或者第三方服务使用时非常有用。示例代码...

    java实现多层嵌套循环参数转换

    例如,如果从JSON字符串转换为Java对象,可以使用Gson或Jackson库: ```java Gson gson = new Gson(); String jsonString = "{\"name\":\"John\", \"age\":30}"; Person person = gson.fromJson(jsonString, Person...

    MenuJSON:使用JSON文件的菜单项目

    例如,Gson库允许我们将Java对象直接转换为JSON字符串,反之亦然。 3. **MenuJSON项目结构**: - 项目可能包含多个类,如`Product`、`Meal`、`Menu`和`Ingredient`,每个类对应JSON文件中的一个实体。 - 每个类会...

    浅谈fastjson的常用使用方法

    - `Entity2json`方法展示了如何将一个Java对象(如Userinfo类的实例)转换为JSON字符串。 - `list2Json`方法演示了将包含Userinfo对象的List集合转换为JSON字符串。 - `String2JSONArray`方法将一个字符串类型的数组...

    android的post请求

    使用`Gson`或`Jackson`库将JSON字符串转化为Java对象。如果没有这些库,可以使用`JSONObject`和`JSONArray`类进行手动解析。 ```java String jsonString; try { jsonString = EntityUtils.toString(response....

    Android天气预报Demo源码

    在源码中,你需要关注如何将接收到的JSON字符串转换为Java对象,比如Weather、City等实体类,这通常涉及到`JSONObject`和`JSONArray`的使用,以及递归解析嵌套的JSON结构。 最后,项目的主体部分`WeatherDemo`可能...

    向memcached中保存Java实体需注意的问题 Demo

    3. **JSON序列化**:使用如Jackson或Gson等库将Java对象转换为JSON字符串,再存储到Memcached中。这种方式易于理解和调试,但数据占用空间可能较大。 **对象存储策略** 1. **单个对象存储**:每个Java实体作为一个...

Global site tag (gtag.js) - Google Analytics