Easy Mapping JSON to Java Objects Using Jackson
介绍
Jackson是一个非常流行且高效的基于Java的库,用于将JSON映射到Java对象,反之亦然。 在本文中,我将演示使用Jackson检索从REST API接收的JSON响应中的数据并将其保存到CSV文件的过程是多么容易。
我将从Elektron数据平台(EDP)检索财务数据,该平台可访问Refinitiv的各种数据集,并将使用历史价格作为样本。
您可能还会喜欢:用Jackson处理JSON
先决条件
1. EDP访问凭证(用户名,密码和clientId),可以检索历史定价事件数据。 您可以联系Refinitiv代表以获取用户名和密码,并在App密钥生成器中使用该用户名和密码生成clientId。
2.
怎么运行的
该过程的概述如下图:
首先,您需要具有一个Java类(图中的顶部灰色框),该类与EDP的JSON数据响应的格式匹配。 下面的创建与EDP的JSON响应匹配的Java类"中介绍了创建Java类的步骤。
然后,您可以使用Jackson
在我的应用程序中,我将通过调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //Jackson ObjectMapper reads HistoricalPricingEvents class and historical pricing events JSON response //to create an object representing the parsed JSON. HistoricalPricingEvent eventsData = new ObjectMapper().readerFor( HistoricalPricingEvent.class).readValue(jsonResp); //get the values of data key in the object List<List<String>> data = (List<List<String>>)eventsData.getData(); //Get the values of headers key in the object List<Header> headers= eventsData.getHeaders(); //Get the values of name and type key in headers Iterator<Header> hiterator = headers.iterator(); while(hiterator.hasNext()) { Header aheader = (Header)hiterator.next(); String name = aheader.getName(); String type = aheader.getType(); } |
完整的应用程序源代码,包括
创建一个Java类以匹配来自EPD的JSON响应
我将使用http://www.jsonschema2pojo.org/页面,而不是手动编写完整的Java类,该页面可以从JSON和JSON模式生成带有Jackson批注的Java类。 请按照以下步骤从历史定价事件数据JSON响应的JSON模式创建Java类。
1.转到API Playground并找到/ data / historical-pricing /服务。 然后,选择/ views / events / {universe}路径。
2.选择 Swagger 菜单以下载JSON模式文件。
3.打开架构文件。 在/ views / events / {universe} 下,找到包含数据的成功响应(200 HTTP状态代码)。 响应引用/ definitions / historicalPricingData路径中的值。
将值复制到/ definitions / historicalPricingData路径中:
将值粘贴到http://www.jsonschema2pojo.org/上的文本框中
4.在文本框中查找值,找到
将值复制到
将
文本框中(步骤3-4)的完整JSON模式是dataResponseJson.zip。
5.设置 Package 和 Class name ,例如 com.java.response和
6.点击 Zip 按钮。 然后,生成Java类并将其压缩在zip文件中。 最后,显示zip文件名:
单击文件名进行下载。
解压缩zip文件时,将看到Java类文件(
编译并运行应用程序
在编译和运行应用程序之前,您必须将
1 | set CLASSPATH=C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\commons-codec-1.11.jar;C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\commons-logging-1.2.jar;C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\httpclient-4.5.9.jar;C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\httpcore-4.4.11.jar;C:\thirdPartyJars\JsonInJava\json-20180813.jar;C:\thirdPartyJars\commons-cli-1.4\commons-cli-1.4.jar;C:\thirdPartyJars\Jackson\jackson-annotations-2.9.9.jar;C:\thirdPartyJars\Jackson\jackson-core-2.9.9.jar;C:\thirdPartyJars\Jackson\jackson-databind-2.9.9.jar |
下面的Java命令行请求项名称" THB ="(即泰铢)的最新五个报价事件如下:
1 | java -CLASSPATH %CLASSPATH%;. com.java.HistoricalPricingEventsRequestor -user <EDP username> -clientId <clientId> -rics THB= -events quote -count 5 |
成功后,控制台将显示以下内容:
您现在可以检查CSV文件中的历史价格事件数据,如下例所示:
摘要
这只是一个示例,用于说明如何使用Jackson将JSON映射到Java对象。 然后,您可以通过各种方式轻松管理Java对象。 它还建议使用http://www.jsonschema2pojo.org/,它可以根据JSON响应架构生成Java类。 Jackson要求使用该Java类将JSON响应解析为该Java类的对象。 尤其是使用架构文件访问和更新,这可以更加自动化,可以在APIDocs中找到其他API。
进一步阅读
用Jackson处理JSON
JSON的Jackson注释:反序列化