Json 数据反序列化为Java对象_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Json 数据反序列化为Java对象

Json 数据反序列化为Java对象

 2013/8/29 3:55:41  boonya  程序员俱乐部  我要评论(0)
  • 摘要:前言:我们在项目中经常用到的是Json格式的数据,如果是将一个被Jackson转化为JSON数据格式的Java对象进行操作,我们就需要将JSON数据再反序列化为Java对象。1、实体对象packagecom.boonya.gps;importjava.io.Serializable;importorg.codehaus.jackson.annotate.JsonProperty;publicclassPointimplementsSerializable
  • 标签:Java 数据 JSON JS 序列化
前言:我们在项目中经常用到的是Json格式的数据,如果是将一个被Jackson转化为JSON数据格式的Java对象进行操作,我们就需要将JSON数据再反序列化为Java对象。
1、实体对象
class="java" name="code">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.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反序列化为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();
		
		//Jackson转化的原始数据格式
		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);
		
        //JSON数据反序列化Java对象
		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}]");
		String json3=jsto.getJsonFromObject(latlngs);
		System.out.println(json3);
		
		//JSON反序列化为Java对象
		//jsto.getPointsByJsonString(json3);//exception

	}

}

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}]"
发表评论
用户名: 匿名