`
Josh_Persistence
  • 浏览: 1653589 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Java解析JSON格式的数据封装到对应的Object中 - Google Gson的使用

阅读更多

需求:

有一个已知字段名的JSON字符串数组:"{\"serverMetrics\":[{\"vip\":\"caty1.vip.ebay.com\", \"metricsName\":\"CPU Number\", \"hostName\":\"caty1\", \"metricsTime\":\"20130101 13:22:15\", \"partitionKey\":\"00\", \"value\":\"1324\", \"thresholdParam1\":\"param1\", \"thresholdParam2\":\"param2\", \"thresholdParam3\":\"param3\", \"metricsP1\":\"p1\", \"metricsP2\":\"p2\", \"metricsP3\":\"p3\"}," +
                "{\"vip\":\"caty2.vip.ebay.com\", \"metricsName\":\"Memory\", \"hostName\":\"caty2\", \"metricsTime\":\"20130102 09:22:15\", \"partitionKey\":\"00\", \"value\":\"23456\", \"thresholdParam1\":\"param12\", \"thresholdParam2\":\"param22\", \"thresholdParam3\":\"param32\", \"metricsP1\":\"p12\", \"metricsP2\":\"p22\", \"metricsP3\":\"p32\"}," +
                "{\"vip\":\"caty3.vip.ebay.com\", \"metricsName\":\"Storage\", \"hostName\":\"caty3\", \"metricsTime\":\"20130103 19:22:15\", \"partitionKey\":\"00\", \"value\":\"56789\", \"thresholdParam1\":param13, \"thresholdParam23\":\"param2\", \"thresholdParam33\":\"param3\", \"metricsP13\":\"p1\", \"metricsP23\":\"p2\", \"metricsP33\":\"p3\"}" "]}";

 

现在需要将该字符串封装到一个相应的Obejct中,考虑到Java中这类对象我们通常称为值传递对象(用来将传递的请求封装成相应的对象),我们可以创建相应的VO(Value Object), 将该VO命名为ServerMetricsVO

,而很容易看出,上面的Json格式的数据是一个数组,所以在ServerMetricsVO中会有一个List来对应此数组,于是我们再创建一个ServerMetricsItemVO,在ServerMetricsVO中有一个属性是List<ServerMetricsItemVO>. 为了体现Java的抽象编程,我们还创建了一个AbstractVO.最后创建一个Junit Class 来进行测试。

 

一、AbtractVO

 

public abstract class AbstractVO {
	/**
	 * Wrap the JSON format string to related VO object
	 * @param jsonString
	 * @return
	 */
	public abstract  AbstractVO fromGson(String jsonString);
}

 

 

 

二、ServerMetricsVO

 

public class ServerMetricsVO extends AbstractVO {

    /**
     * The property name must equal the property key name in returned JSON format
     */
    private List<ServerMetricsItemVO> serverMetrics;
   
    public ServerMetricsVO fromGson(String jsonString) {
        // Gson gson = new Gson(); // it will cause some Date parsed exception in some environment.
        Gson gson = new GsonBuilder().setDateFormat(DateUtils.MIDDLE_LINE_TIMESTAMP).create();
        ServerMetricsVO serverMetricsVO = gson.fromJson(jsonString, ServerMetricsVO.class);
        return serverMetricsVO;
    }

    public List<ServerMetricsItemVO> getServerMetrics() {
        return serverMetrics;
    }

    public void setServerMetrics(List<ServerMetricsItemVO> serverMetrics) {
        this.serverMetrics = serverMetrics;
    }
   
}

 

三、ServerMetricsItemVO

 

/**
 * This class is used to accept the JSON request and wrapped it to
 * the class
 * @author Josh Wang(Sheng)
 * 
 */
public class ServerMetricsItemVO {
	private String vip;
	
	private String metricsName;
	
	private String hostName;
	
	private Date metricsTime;
	
	private int partitionKey;
	
	private double value;
	
	private String thresholdParam1;
	
	private String thresholdParam2;
	
	private String thresholdParam3;
	
	private String metricsP1;
	
	private String metricsP2;
	
	private String metricsP3;
	
	/**
	 * table id used to decide to query source, will not persist into Database.
	 */
	private String tableId;

	public String getVip() {
		return vip;
	}

	public void setVip(String vip) {
		this.vip = vip;
	}

	public String getMetricsName() {
		return metricsName;
	}

	public void setMetricsName(String metricsName) {
		this.metricsName = metricsName;
	}

	public String getHostName() {
		return hostName;
	}

	public void setHostName(String hostName) {
		this.hostName = hostName;
	}

	public Date getMetricsTime() {
		return metricsTime;
	}

	public void setMetricsTime(Date metricsTime) {
		this.metricsTime = metricsTime;
	}

	public int getPartitionKey() {
		return partitionKey;
	}

	public void setPartitionKey(int partitionKey) {
		this.partitionKey = partitionKey;
	}

	public double getValue() {
		return value;
	}

	public void setValue(double value) {
		this.value = value;
	}

	public String getThresholdParam1() {
		return thresholdParam1;
	}

	public void setThresholdParam1(String thresholdParam1) {
		this.thresholdParam1 = thresholdParam1;
	}

	public String getThresholdParam2() {
		return thresholdParam2;
	}

	public void setThresholdParam2(String thresholdParam2) {
		this.thresholdParam2 = thresholdParam2;
	}

	public String getThresholdParam3() {
		return thresholdParam3;
	}

	public void setThresholdParam3(String thresholdParam3) {
		this.thresholdParam3 = thresholdParam3;
	}

	public String getMetricsP1() {
		return metricsP1;
	}

	public void setMetricsP1(String metricsP1) {
		this.metricsP1 = metricsP1;
	}

	public String getMetricsP2() {
		return metricsP2;
	}

	public void setMetricsP2(String metricsP2) {
		this.metricsP2 = metricsP2;
	}

	public String getMetricsP3() {
		return metricsP3;
	}

	public void setMetricsP3(String metricsP3) {
		this.metricsP3 = metricsP3;
	}

	public String getTableId() {
		return tableId;
	}

	public void setTableId(String tableId) {
		this.tableId = tableId;
	}
	
	
}

 

四、TestVOConverterService

public class TestVOConverterService {

	private static IVOConverterService converterService;
	
	@BeforeClass
	public static void setUp() {
		converterService = (IVOConverterService)context.getBean("voConverterService");
	}
	
	@Test
	public void convert() {
		String jsonString = "{\"serverMetrics\":[{\"vip\":\"caty1.vip.ebay.com\", \"metricsName\":\"CPU Number\", \"hostName\":\"caty1\", \"metricsTime\":\"20130101 13:22:15\", \"partitionKey\":\"00\", \"value\":\"1324\", \"thresholdParam1\":\"param1\", \"thresholdParam2\":\"param2\", \"thresholdParam3\":\"param3\", \"metricsP1\":\"p1\", \"metricsP2\":\"p2\", \"metricsP3\":\"p3\"}," +
				"{\"vip\":\"caty2.vip.ebay.com\", \"metricsName\":\"Memory\", \"hostName\":\"caty2\", \"metricsTime\":\"20130102 09:22:15\", \"partitionKey\":\"00\", \"value\":\"23456\", \"thresholdParam1\":\"param12\", \"thresholdParam2\":\"param22\", \"thresholdParam3\":\"param32\", \"metricsP1\":\"p12\", \"metricsP2\":\"p22\", \"metricsP3\":\"p32\"}," +
				"{\"vip\":\"caty3.vip.ebay.com\", \"metricsName\":\"Storage\", \"hostName\":\"caty3\", \"metricsTime\":\"20130103 19:22:15\", \"partitionKey\":\"00\", \"value\":\"56789\", \"thresholdParam1\":param13, \"thresholdParam23\":\"param2\", \"thresholdParam33\":\"param3\", \"metricsP13\":\"p1\", \"metricsP23\":\"p2\", \"metricsP33\":\"p3\"}" +
				"]}";
//		String jsonString = "{\"serverMetrics\":[{\"vip\":\"caty1.vip.ebay.com\", \"metricsName\":\"CPU Number\", \"hostName\":\"caty1\", \"metricsTime\":\"2013-01-01 13:22:15\", \"partitionKey\":\"00\", \"value\":\"1324\", \"thresholdParam1\":\"param1\", \"thresholdParam2\":\"param2\", \"thresholdParam3\":\"param3\", \"metricsP1\":\"p1\", \"metricsP2\":\"p2\", \"metricsP3\":\"p3\"}]}";
		AbstractVO vo = new ServerMetricsVO();
		ServerMetricsVO metricsVO = (ServerMetricsVO)converterService.convert(vo, jsonString);
		for (ServerMetricsItemVO item : metricsVO.getServerMetrics()) {
			print(item.getVip() + "   " + item.getHostName() + "  " + item.getMetricsName() + "  " + item.getPartitionKey());
		}
	}
}

 

从上面的代码可以看出,用Goole的Gson类来做这个操作,那可是相当的简单,只需要构造一个Gson对象,传入一个json字符串和想要转换到的目标Object类即可完成转换。当然转换的时候一定要注意传入的json字符串是有效的json字符串。

 

 

2
6
分享到:
评论
4 楼 淘气天空lc 2013-07-26  
Josh_Persistence 写道
有相关的例子吗?

http://code.alibabatech.com/wiki/display/FastJSON/Tutorial
3 楼 shmily2038 2013-07-25  
jackson效率比较好吧,同样也能支持你这种转换
2 楼 Josh_Persistence 2013-07-25  
有相关的例子吗?
1 楼 淘气天空lc 2013-07-24  
fastjson更好用。。

相关推荐

    java操作json的类库 google-gson

    Java操作JSON的类库Google-Gson是开发人员在处理JSON数据时的一个强大工具。它以其稳定性和易用性而闻名,被广泛应用于各种Java项目中。Google-Gson库允许我们将Java对象转换为JSON字符串,反之亦然,极大地简化了...

    JAVA解析JSON相关.docx

    在Java中,解析JSON通常涉及到将JSON字符串转换成Java对象,以便于程序能够更方便地操作这些数据。 ### JSON库的使用 文档提到使用`json-lib.jar`开发包来解析JSON。`json-lib`是一个开源的Java库,用于处理JSON...

    Android JSON数据的封装及解析

    本教程将深入讲解如何在Android中对JSON数据进行封装和解析,以便于在应用程序中有效使用。 一、JSON基础知识 JSON是一种独立于语言的数据表示格式,它基于ECMAScript的一个子集。一个基本的JSON对象由键值对组成,...

    java中json的封装和解析

    本篇将主要探讨使用Java中的JSON处理,特别是通过Jackson库进行封装和解析。 一、JSON基本概念 JSON是一种独立于语言的数据格式,基于JavaScript语法,但不依赖JavaScript执行。其数据结构主要由对象(Object)和数...

    在JAVA中封装JSON数据

    在Java中封装JSON数据是一项常见的任务,特别是在开发Web应用程序时,JSON(JavaScript Object Notation)因其轻量级、易于阅读和编写的特点,被广泛用于数据交换。本篇将深入探讨如何在Java中处理JSON数据,结合`...

    使用java请求json接口数据

    在Java中,我们通常使用`org.json`库或`com.google.gson`库来处理JSON对象。 标题"使用java请求json接口数据"指出我们要使用Java发送HTTP请求到一个提供JSON数据的接口。这通常涉及到HTTP的GET或POST方法。GET用于...

    Android 实用的数据json数据解析封装类

    在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据传输。对于Android开发者来说,理解和熟练掌握JSON解析至关重要...

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

    【Java处理JSON格式数据的通用类】是一种在Java中处理JSON数据的标准方法,它能够方便地接收和返回JSON数据,解决开发过程中与JSON交互的问题。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛...

    json封装的jar包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它以文本形式存储和传输数据,易于人阅读和编写,同时也容易让机器解析和生成。JSON格式与JavaScript语法紧密...

    java解析json文件Jar包

    为了在Java中解析JSON文件,我们需要依赖一些库,这些库已经封装了解析和生成JSON的复杂逻辑。在这个"java解析json文件Jar包"中,包含了7个必要的Jar包,它们是实现这一目标的关键。 1. **json.org**: 这个库可能是...

    封装json数据以及解析需要的jar包

    本篇文章将详细探讨如何在Java中封装JSON数据以及解析JSON数据,同时会涉及到所需的相关jar包。 一、JSON基本概念 JSON是一种独立于语言的数据格式,基于JavaScript的一个子集。它使用完全独立于语言的文本格式来...

    Google gson jar包

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的数据传输,因为它易于阅读和编写,同时也容易机器解析和生成。Gson是Google提供的一款Java库,用于在...

    解析json字符串封装成java对象.docx

    在实际开发中,推荐使用成熟的JSON库,如Google的Gson库,它可以更方便、安全地解析和序列化JSON,支持各种复杂的JSON结构和数据类型,同时提供了丰富的功能和错误处理机制。 在使用Gson库时,你可以创建一个Java类...

    JSON的封装和解析

    JSON(JavaScript Object ...以上就是关于JSON封装和解析的基本知识,包括JSON格式、库的使用、Socket通信以及解析过程中的注意事项。理解并熟练运用这些概念和方法,能够帮助你在实际开发中有效地处理数据交换。

    gson解析工具类封装

    在Java开发中,Gson库是Google提供的一款强大的JSON(JavaScript Object Notation)解析库,它使得Java对象和JSON数据之间的互相转换变得极其简单。本文将深入探讨如何封装一个Gson解析工具类,以优雅地处理JSON数据...

    JSON与Java互相转换Demo(Eclipse)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。在Java中,我们常常需要将JSON字符串与Java对象之间进行转换,以便于...

    JSON封装数据与取值

    在Java中处理JSON数据时,我们通常会使用第三方库如Jackson或Gson来帮助序列化和反序列化对象。但在某些情况下,可能由于特定需求(比如避免引入额外依赖)或学习目的,我们需要手动实现这一过程。本篇将介绍如何不...

    JSON-RPC for Java使用说明

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java环境中,JSON-RPC允许应用程序通过网络调用其他...

    Java 和 Json 对象转换的包

    JSON是一种轻量级的数据交换格式,因其易读性和易于解析的特性而广泛使用。下面我们将深入探讨Java与JSON对象转换的相关知识点。 1. **Java与JSON的基本概念** - JSON是一种文本格式,遵循ECMAScript的一个子集,...

    JSON解析数据listview显示

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C家族语言(包括C、C++、C#、Java、JavaScript、Perl、Python等)的习惯,这使得JSON成为理想的...

Global site tag (gtag.js) - Google Analytics