`

Json 数据反序列化为Java对象

阅读更多
前言:我们在项目中经常用到的是Json格式的数据,如果是将一个被Jackson转化为JSON数据格式的Java对象进行操作,我们就需要将JSON数据再反序列化为Java对象。
1、实体对象
package com.boonya.gps;

import java.io.Serializable;

import org.codehaus.jackson.annotate.JsonProperty;

public class Point implements Serializable{
	
	private static final long serialVersionUID = -8359918523259373062L;
	private double lat;
	private double lng;
	
	public double getLat() {
		return lat;
	}
	
	public Point(@JsonProperty("lat") double lat,@JsonProperty("lng") double lng) {
		this.lat = lat;
		this.lng = lng;
	}

	public void setLat(double lat) {
		this.lat = lat;
	}
	
	public double getLng() {
		return lng;
	}
	
	public void setLng(double lng) {
		this.lng = lng;
	}

	@Override
	public String toString() {
		return "Point(lat,lng)="+" {lat:"+lat+","+"lng:"+lng+"}";
	}

}

2、实现JSON数据反序列化为Java对象
package com.boonya.gps;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
/**
 * JSON数据反序列化为Java对象或对象集合
 * @author BOONYACHENGDU@GMAIL.COM
 * @date  2013-8-28
 */
public class JSONSeriaToObject {
	
	/**
	 * 对象转JSON
	 * @param obj
	 * @return
	 */
	public  String getJsonFromObject(Object obj){
		ObjectMapper om = new ObjectMapper();
		try {
			return om.writeValueAsString(obj);
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}
	
	/**
	 * JSON发序列化为Java对象
	 * @param jsonStr
	 * @return
	 */
	public  Point  getPointByJsonString(String jsonStr){
		Point point =null;
		ObjectMapper om = new ObjectMapper();
		try {
			JsonNode node=om.readTree(jsonStr);
			point= (Point) om.readValue(node.toString(),Point.class);
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("<:success single point:>"+point.toString());
		return point;
	}
	
	/**
	 * 拼接Json数据的字符串转化为标准Json格式字符串
	 * @param str
	 * @return
	 */
	public  String  getJsonNodeStringByString(String str){
		ObjectMapper om = new ObjectMapper();
		try {
			JsonNode node=om.readTree(str);
			return node.toString();
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}
	
	/**
	 * JSON发序列化为Java对象集合
	 * @param jsonStr
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public  List<Point>  getPointsByJsonString(String jsonStr){
		List<Point> points = new ArrayList<Point>();
		ObjectMapper om = new ObjectMapper();
		try {
			JsonNode node=om.readTree(jsonStr);
			points= (List<Point>) om.readValue(node.toString(), new TypeReference<List<Point>>() {});
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		for (int i = 0; i < points.size(); i++) {
			System.out.println("<:success index "+i+":>"+points.get(i).toString());
		}
		return points;
	}

	/**
	 * JSON数据反序列化为Java对象的测试入口
	 * @param args
	 * @throws JsonGenerationException
	 * @throws JsonMappingException
	 * @throws IOException
	 */
	public static void main(String[] args) throws JsonGenerationException,JsonMappingException, IOException {
		JSONSeriaToObject jsto=new JSONSeriaToObject();
		
		//原始数据格式
		System.out.println("----------------------------------Jackson JSON(list<T>)  to Java  Object-----------------------------"); 
		List<Point> points = new ArrayList<Point>();
		points.add(new Point(34.2332,104.46664));
		String json=jsto.getJsonFromObject(points);
		System.out.println(json);
		//JSON序列化Java对象
		jsto.getPointsByJsonString(json);
		
		System.out.println("----------------------------------Jackson JSON(T)  to Java  Object-----------------------------");
		Point point=new Point(34.5332,104.76664);
		String json2=jsto.getJsonFromObject(point);
		System.out.println(json2);
		//JSON序列化Java对象
		jsto.getPointByJsonString(json2);
		
		//JSON序列化为Java对象
		System.out.println("----------------------------------Ping string JSON  to Java  Object-----------------------------");
		String latlngs =new String("[{\"lat\":34.232013,\"lng\":103.466002},{\"lat\":34.531939,\"lng\":103.665816}]");
		//经测试以下数据若调用getJsonFromObject是不行的会产生异常
		String json3=jsto.getJsonNodeStringByString(latlngs);
		System.out.println(json3);
		
		//JSON序列化Java对象
		jsto.getPointsByJsonString(json3);

	}

}

3、打印结果
----------------------------------Jackson JSON(list<T>)  to Java  Object-----------------------------
[{"lat":34.2332,"lng":104.46664}]
<:success index 0:>Point(lat,lng)= {lat:34.2332,lng:104.46664}
----------------------------------Jackson JSON(T)  to Java  Object-----------------------------
{"lat":34.5332,"lng":104.76664}
<:success single point:>Point(lat,lng)= {lat:34.5332,lng:104.76664}
----------------------------------Ping string JSON  to Java  Object-----------------------------
[{"lat":34.232013,"lng":103.466002},{"lat":34.531939,"lng":103.665816}]
<:success index 0:>Point(lat,lng)= {lat:34.232013,lng:103.466002}
<:success index 1:>Point(lat,lng)= {lat:34.531939,lng:103.665816}
分享到:
评论
1 楼 liuweihug 2014-08-01  
json序列化反序列化插件-json2.js 介绍和使用 - 前端编程 - IT工作生活这点事。Just Such So!
http://www.suchso.com/UIweb/json2-js-stringify-parse-serializable-deserialize.html

相关推荐

    java服务端生成json(json服务端)

    使用Gson,你可以轻松地将Java对象序列化为JSON,然后在服务端发送到客户端,或者将接收到的JSON数据反序列化为Java对象。以下是一个简单的示例: ```java import com.google.gson.Gson; public class User { ...

    使用Gson解析json数据

    Gson是Google提供的一款开源库,它能够将Java对象转换为对应的JSON字符串,也可以将JSON数据反序列化为Java对象。这对于处理JSON数据非常方便。在本示例中,我们将涵盖以下几个关键知识点: 1. **安装Gson库**:...

    SpringBoot处理JSON数据示例代码

    Spring Boot提供了对JSON的强大支持,使得开发者可以轻松地将Java对象转换为JSON格式的数据,并将JSON数据反序列化为Java对象。本示例代码着重展示了如何在Spring Boot应用中处理JSON数据。 1. **依赖引入**: 在`...

    Gson+Json的jar包

    它的主要功能是将Java对象转换为对应的JSON字符串,也可以将JSON数据反序列化为Java对象。Gson库的强大之处在于其灵活性和自动化处理,它能够自动映射JSON到Java对象,而无需编写大量的转换代码。例如,你可以直接...

    java解析json的4个jar

    在JSON解析中,它可以用于将Java对象转换成JSON格式,或将JSON数据反序列化为Java对象。 3. **Ez Morph** (`ezmorph-1.0.6.jar`): Ez Morph是一个对象到对象的转换库,它提供了动态类型转换的功能。在JSON处理中...

    json-lib-2.3.jar

    json-lib-2.3.jar是这个库的一个版本,用于支持将Java对象转换成JSON格式和将JSON数据反序列化为Java对象。 标题中提到的"json-lib-2.3.jar"是json-lib库的一个具体实现,主要包含了一系列处理JSON的类和方法。这个...

    Json的jar包

    3. JSON对象和Java对象之间的转换:Json-lib可以将Java对象序列化为JSON字符串,也可以将JSON数据反序列化为Java对象,这对于数据交换非常有用。 4. JSON解析:提供了解析JSON字符串的方法,如`JSONObject ...

    GSON解析复杂的JSON数组 - CSDN博客1

    fromJson()方法则用于将JSON数据反序列化为Java对象,同样有多种形式供选择: 1. T fromJson(JsonElement json, Class classOfT):将JsonElement转换为指定的Java对象,classOfT是目标对象的Class类型。 2. T from...

    gson 2.3.1 json转换利器

    Gson通过简单的API使得Java对象能够被序列化为JSON字符串,反之也能将JSON数据反序列化为Java对象。 二、Gson 2.3.1核心功能 1. **对象到JSON字符串的转换**:Gson提供`Gson.toJson()`方法,可以将任何Java对象转换...

    Gson解析嵌套json

    在Java开发中,Gson库是Google提供的一款强大的JSON处理工具,它允许我们将Java对象转换为JSON字符串,同时也能够将JSON数据反序列化为Java对象。当我们遇到嵌套的JSON数据时,Gson也能优雅地处理。嵌套的JSON通常...

    JSON基本操作(自记)

    它提供了将Java对象转换为JSON格式,以及从JSON数据反序列化为Java对象的功能。 5. **ezmorph库**:`ezmorph-1.0.3.jar`是一个Java库,用于对象的动态转型,可能在JSON处理中用于将JSON数据转换为特定的Java类型。 ...

    json_jar.zip

    Gson是Google开发的JSON库,它可以直接将Java对象转换为JSON字符串,也可以将JSON数据反序列化为Java对象。Gson的使用简单,API直观,使得在Java应用中处理JSON变得十分便捷。 JSON Jar中的文件可能包括以下内容: ...

    java解析json

    无论是将复杂的对象结构序列化为JSON,还是将JSON数据反序列化为Java对象,Gson都提供了简单而强大的工具。掌握Gson的使用对于任何从事Web开发或需要处理JSON数据的Java开发者来说都是必不可少的技能。

    jettison-1.3.jar

    Jettison与JAX-RS结合使用时,可以自动将Java对象序列化为JSON,或者将接收到的JSON数据反序列化为Java对象。 三、Jettison的核心功能 1. JSON序列化与反序列化:Jettison能够将Java对象转换成JSON字符串,同时也...

    Gson和Jsonlib需要的jar包

    Gson是Google提供的一款强大的JSON库,它可以直接将Java对象转换为JSON字符串,也可以将JSON数据反序列化为Java对象。Gson的优点在于其简洁的API和高效的性能。 #### Gson的基本使用 1. **序列化**:将Java对象...

    GsonFormat.jar

    Gson则是Google提供的一款强大的JSON解析库,能够方便地将Java对象转换为JSON字符串,同时也支持将JSON数据反序列化为Java对象。 GsonFormat插件的使用简化了手动编写Java实体类的过程,尤其在处理大量JSON数据时,...

    json jar包

    这个jar包包含了处理JSON的各种工具和类,使得开发者可以轻松地将Java对象转换为JSON字符串,或者将JSON数据反序列化为Java对象。这在进行服务器端数据传输和存储时非常有用,能够简化数据处理流程,提高开发效率。 ...

    jsonlib依赖包

    `json-lib`是一个Java语言编写的JSON库,它提供了一套完整的API,帮助开发者将Java对象转换为JSON字符串,以及将JSON数据反序列化为Java对象。这个`json.jar`包正是`json-lib`库的核心组件,包含所有必要的类和方法...

    Json必用jar包

    通过这些jar包,开发者可以轻松地将Java对象序列化为JSON字符串,或者将接收到的JSON数据反序列化为Java对象,从而实现数据的传输和交换。 总结来说,"Json必用jar包"是一个包含了常用Java JSON处理库的集合,旨在...

    httpClient、httpCore、Gson.jar包

    它可以将任何Java对象转换为对应的JSON字符串,也可以将JSON数据反序列化为Java对象。这对于API调用中数据的序列化和反序列化非常有用。例如,你可以使用`Gson`实例将Java对象转换为JSON字符串,然后作为POST请求的...

Global site tag (gtag.js) - Google Analytics