需求:
有一个已知字段名的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字符串。
相关推荐
Java操作JSON的类库Google-Gson是开发人员在处理JSON数据时的一个强大工具。它以其稳定性和易用性而闻名,被广泛应用于各种Java项目中。Google-Gson库允许我们将Java对象转换为JSON字符串,反之亦然,极大地简化了...
在Java中,解析JSON通常涉及到将JSON字符串转换成Java对象,以便于程序能够更方便地操作这些数据。 ### JSON库的使用 文档提到使用`json-lib.jar`开发包来解析JSON。`json-lib`是一个开源的Java库,用于处理JSON...
本教程将深入讲解如何在Android中对JSON数据进行封装和解析,以便于在应用程序中有效使用。 一、JSON基础知识 JSON是一种独立于语言的数据表示格式,它基于ECMAScript的一个子集。一个基本的JSON对象由键值对组成,...
本篇将主要探讨使用Java中的JSON处理,特别是通过Jackson库进行封装和解析。 一、JSON基本概念 JSON是一种独立于语言的数据格式,基于JavaScript语法,但不依赖JavaScript执行。其数据结构主要由对象(Object)和数...
在Java中封装JSON数据是一项常见的任务,特别是在开发Web应用程序时,JSON(JavaScript Object Notation)因其轻量级、易于阅读和编写的特点,被广泛用于数据交换。本篇将深入探讨如何在Java中处理JSON数据,结合`...
在Java中,我们通常使用`org.json`库或`com.google.gson`库来处理JSON对象。 标题"使用java请求json接口数据"指出我们要使用Java发送HTTP请求到一个提供JSON数据的接口。这通常涉及到HTTP的GET或POST方法。GET用于...
在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据传输。对于Android开发者来说,理解和熟练掌握JSON解析至关重要...
【Java处理JSON格式数据的通用类】是一种在Java中处理JSON数据的标准方法,它能够方便地接收和返回JSON数据,解决开发过程中与JSON交互的问题。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它以文本形式存储和传输数据,易于人阅读和编写,同时也容易让机器解析和生成。JSON格式与JavaScript语法紧密...
为了在Java中解析JSON文件,我们需要依赖一些库,这些库已经封装了解析和生成JSON的复杂逻辑。在这个"java解析json文件Jar包"中,包含了7个必要的Jar包,它们是实现这一目标的关键。 1. **json.org**: 这个库可能是...
本篇文章将详细探讨如何在Java中封装JSON数据以及解析JSON数据,同时会涉及到所需的相关jar包。 一、JSON基本概念 JSON是一种独立于语言的数据格式,基于JavaScript的一个子集。它使用完全独立于语言的文本格式来...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的数据传输,因为它易于阅读和编写,同时也容易机器解析和生成。Gson是Google提供的一款Java库,用于在...
在实际开发中,推荐使用成熟的JSON库,如Google的Gson库,它可以更方便、安全地解析和序列化JSON,支持各种复杂的JSON结构和数据类型,同时提供了丰富的功能和错误处理机制。 在使用Gson库时,你可以创建一个Java类...
JSON(JavaScript Object ...以上就是关于JSON封装和解析的基本知识,包括JSON格式、库的使用、Socket通信以及解析过程中的注意事项。理解并熟练运用这些概念和方法,能够帮助你在实际开发中有效地处理数据交换。
在Java开发中,Gson库是Google提供的一款强大的JSON(JavaScript Object Notation)解析库,它使得Java对象和JSON数据之间的互相转换变得极其简单。本文将深入探讨如何封装一个Gson解析工具类,以优雅地处理JSON数据...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。在Java中,我们常常需要将JSON字符串与Java对象之间进行转换,以便于...
在Java中处理JSON数据时,我们通常会使用第三方库如Jackson或Gson来帮助序列化和反序列化对象。但在某些情况下,可能由于特定需求(比如避免引入额外依赖)或学习目的,我们需要手动实现这一过程。本篇将介绍如何不...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java环境中,JSON-RPC允许应用程序通过网络调用其他...
JSON是一种轻量级的数据交换格式,因其易读性和易于解析的特性而广泛使用。下面我们将深入探讨Java与JSON对象转换的相关知识点。 1. **Java与JSON的基本概念** - JSON是一种文本格式,遵循ECMAScript的一个子集,...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C家族语言(包括C、C++、C#、Java、JavaScript、Perl、Python等)的习惯,这使得JSON成为理想的...