用于JSON处理的Java API(JSR-353)是用于生成和使用JSON的Java标准,它是Java EE 7的一部分引入。JSR-353包括对象(类似于DOM)和流(类似于StAX)API。 在本文中,我将演示我们在EclipseLink 2.6中添加到MOXy的JSON绑定中的最初JSR-353支持。 现在,您可以使用MOXy进行封送:

  • javax.json.JsonArrayBuilder
  • javax.json.JsonObjectBuilder

并从以下方面进行调度:

  • javax.json.JsonStructure
  • javax.json.JsonObject
  • javax.json.JsonArray

您可以使用每晚构建的EclipseLink 2.6.0进行尝试:

  • http://www.eclipse.org/eclipselink/downloads/nightly.php

这里提供了JSR-353参考实现:

  • https://java.net/projects/jsonp/downloads/download/ri/javax.json-ri-1.0.zip

Java模型

以下是我们将在本文中使用的简单客户模型。 请注意,对于本示例,我们仅使用标准的JAXB(JSR-222)批注。

顾客

package blog.jsonp.moxy;import java.util.*;
import javax.xml.bind.annotation.*;@XmlType(propOrder={"id", "firstName", "lastName", "phoneNumbers"})
public class Customer {private int id;private String firstName;private String lastName;private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}@XmlElement(nillable=true)public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}@XmlElementpublic List<PhoneNumber> getPhoneNumbers() {return phoneNumbers;}}

电话号码

package blog.jsonp.moxy;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class PhoneNumber {private String type;private String number;public String getType() {return type;}public void setType(String type) {this.type = type;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}}

jaxb.properties

要将MOXy指定为JAXB提供程序,您需要在与域模型相同的包中包含一个名为jaxb.properties的文件,并带有以下条目(请参阅:将EclipseLink MOXy指定为JAXB提供程序 )

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

元帅演示

在下面的演示代码中,我们将结合使用JSR-353和MOXy API来生成JSON。 JSR-353的JsonObjectBuilderJsonArrayBuilder用于生成JsonObjectJsonArray的实例。 通过将MOXy包装在MOXy的JsonObjectBuilderResultJsonArrayBuilderResult实例中,我们可以使用MOXy封送这些构建器。

package blog.jsonp.moxy;import java.util.*;
import javax.json.*;
import javax.json.stream.JsonGenerator;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.oxm.json.*;public class MarshalDemo {public static void main(String[] args) throws Exception {// Create the EclipseLink JAXB (MOXy) MarshallerMap<String, Object> jaxbProperties = new HashMap<String, Object>(2);jaxbProperties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");jaxbProperties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);JAXBContext jc = JAXBContext.newInstance(new Class[] {Customer.class}, jaxbProperties);Marshaller marshaller = jc.createMarshaller();// Create the JsonArrayBuilderJsonArrayBuilder customersArrayBuilder = Json.createArrayBuilder();// Build the First CustomerCustomer customer = new Customer();customer.setId(1);customer.setFirstName("Jane");customer.setLastName(null);PhoneNumber phoneNumber = new PhoneNumber();phoneNumber.setType("cell");phoneNumber.setNumber("555-1111");customer.getPhoneNumbers().add(phoneNumber);// Marshal the First Customer Object into the JsonArrayJsonArrayBuilderResult result = new JsonArrayBuilderResult(customersArrayBuilder);marshaller.marshal(customer, result);// Build List of PhoneNumer Objects for Second CustomerList<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>(2);PhoneNumber workPhone = new PhoneNumber();workPhone.setType("work");workPhone.setNumber("555-2222");phoneNumbers.add(workPhone);PhoneNumber homePhone = new PhoneNumber();homePhone.setType("home");homePhone.setNumber("555-3333");phoneNumbers.add(homePhone);// Marshal the List of PhoneNumber ObjectsJsonArrayBuilderResult arrayBuilderResult = new JsonArrayBuilderResult();marshaller.marshal(phoneNumbers, arrayBuilderResult);customersArrayBuilder// Use JSR-353 APIs for Second Customer's Data.add(Json.createObjectBuilder().add("id", 2).add("firstName", "Bob").addNull("lastName")// Included Marshalled PhoneNumber Objects.add("phoneNumbers", arrayBuilderResult.getJsonArrayBuilder())).build();// Write JSON to System.outMap<String, Object> jsonProperties = new HashMap<String, Object>(1);jsonProperties.put(JsonGenerator.PRETTY_PRINTING, true);JsonWriterFactory writerFactory = Json.createWriterFactory(jsonProperties);JsonWriter writer = writerFactory.createWriter(System.out);writer.writeArray(customersArrayBuilder.build());writer.close();}}

输出量

以下是运行Marshal演示( MarshalDemo )的输出。 突出显示的部分(第2-12和18-25行)对应于从我们的Java模型填充的部分。

[{"id":1,"firstName":"Jane","lastName":null,"phoneNumbers":[{"type":"cell","number":"555-1111"}]},{"id":2,"firstName":"Bob","lastName":null,"phoneNumbers":[{"type":"work","number":"555-2222"},{"type":"home","number":"555-3333"}]}
]

解组演示

MOXy使您可以从JSR-353 JsonStructureJsonObjectJsonArray )解组。 要做到这一点只需换歼sonStructure在莫西的JsonStructureSource的实例,并使用需要来源的一个实例解组操作之一。

package blog.jsonp.moxy;import java.io.FileInputStream;
import java.util.*;
import javax.json.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.oxm.json.JsonStructureSource;public class UnmarshalDemo {public static void main(String[] args) throws Exception {try (FileInputStream is = new FileInputStream("src/blog/jsonp/moxy/input.json")) {// Create the EclipseLink JAXB (MOXy) UnmarshallerMap<String, Object> jaxbProperties = new HashMap<String, Object>(2);jaxbProperties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");jaxbProperties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);JAXBContext jc = JAXBContext.newInstance(new Class[] {Customer.class}, jaxbProperties);Unmarshaller unmarshaller = jc.createUnmarshaller();// Parse the JSONJsonReader jsonReader = Json.createReader(is);// Unmarshal Root Level JsonArrayJsonArray customersArray = jsonReader.readArray();JsonStructureSource arraySource = new JsonStructureSource(customersArray);List<Customer> customers = (List<Customer>) unmarshaller.unmarshal(arraySource, Customer.class).getValue();for(Customer customer : customers) {System.out.println(customer.getFirstName());}// Unmarshal Nested JsonObjectJsonObject customerObject = customersArray.getJsonObject(1);JsonStructureSource objectSource = new JsonStructureSource(customerObject);Customer customer = unmarshaller.unmarshal(objectSource, Customer.class).getValue();for(PhoneNumber phoneNumber : customer.getPhoneNumbers()) {System.out.println(phoneNumber.getNumber());}}}}

输入(input.json)

下面JSON输入将使用JsonReader转换为JsonArray。

[{"id":1,"firstName":"Jane","lastName":null,"phoneNumbers":[{"type":"cell","number":"555-1111"}]},{"id":2,"firstName":"Bob","lastName":null,"phoneNumbers":[{"type":"work","number":"555-2222"},{"type":"home","number":"555-3333"}]}
]

输出量

以下是运行解演示程序( UnmarshalDemo )的输出。

Jane
Bob
555-2222
555-3333
参考: EclipseLink MOXy和用于JSON处理的Java API –来自我们的JCG合作伙伴 Blaise Doughan的Java XML和JSON绑定博客中的对象模型API 。

翻译自: https://www.javacodegeeks.com/2013/07/eclipselink-moxy-and-the-java-api-for-json-processing-object-model-apis.html

EclipseLink MOXy和用于JSON处理的Java API –对象模型API相关推荐

  1. eclipselink_EclipseLink MOXy和用于JSON处理的Java API –对象模型API

    eclipselink 用于JSON处理的Java API(JSR-353)是作为Java EE 7的一部分引入的用于生成和使用JSON的Java标准.JSR-353包括对象(类似于DOM)和流(类似 ...

  2. JSON处理的Java API(JSR-353)–流API

    Java很快将具有一组标准的API,作为Java EE 7的一部分处理JSON.此标准定义为JSR 353 – JSON处理的Java API (JSON-P),目前正在最终批准投票中. JSON-P ...

  3. MOXy的@XmlVariableNode – JSON模式示例

    我们正在向EclipseLink MOXy添加从域模型生成JSON模式的 功能 . 为此,我们创建了一个新的变量节点映射. 在本文中,我将通过将Java模型映射到JSON模式来演示新的映射. 您可以使 ...

  4. JSON总结(java篇)

    JSON总结(java篇一) JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于 ...

  5. EclipseLink MOXy作为JAXB提供者

    EclipseLink MOXy是JAXB提供程序,并且是内置在JDK中的默认JAXB提供程序的引人注目的替代品. 首先是一个简单的测试,将Java对象编组为XML: 这是模型: @XmlRootEl ...

  6. java类中声明log对象_用于Android环境,java环境的log打印,可打印任何类型数据

    LogXixi 用于Android环境,java环境的log打印,可打印任何类型数据,根据android项目环境debug环境自动打开,release环境自动关闭android环境log打印,规范be ...

  7. Jackson通过反射将Json转化为java对象

    Jackson的功能比较强大,我们这里主要使用Data Binding的方式,来看看如何使用反射将json转化为java bean,先加入如下依赖: Jackson 的核心模块由三部分组成. jack ...

  8. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  9. JSON数据和Java对象的相互转换

    * JSON解析器:         * 常见的解析器:Jsonlib,Gson,fastjson,jackson          1. JSON转为Java对象         1. 导入jack ...

最新文章

  1. linux编辑conf文件命令,redhat linux7.3字符模式下: vi ***.conf 文件,又用什么命令才可编辑文件啊!!!!??...
  2. Wireshark非标准分析port无流量
  3. websocketpp 只发送一次
  4. Revising the Select Query I(单表查询)
  5. IHttpHandler的妙用之防盗链
  6. Android Studio 3.0+ Record Espresso Test 自动化测试
  7. 【模板】可持久化线段树 1(主席树)
  8. 昂靠的由来[本博作者爆料]
  9. 贝叶斯统计 传统统计_统计贝叶斯如何补充常客
  10. 草稿 9203 作业重点关注
  11. 网易“吃鸡”,干腾讯何事?
  12. 将我人生的第一篇博客献给伟大的软件工程这门课程
  13. caffe---验证码识别
  14. modelsim 10.7安装教程
  15. 学生网站模板——我的家乡-云南(9页) HTML+CSS+JavaScript 关于我的家乡的HTML网页设计-----云南
  16. 汽车行业营销案例(共13份)
  17. Linux网卡驱动发送超时看门狗,如何在linux嵌入式中更改看门狗定时器
  18. 现在有哪些好用的企业报表软件?
  19. xampp php搭建失败,ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败),thinkphpxampp...
  20. Jquery取得动态id中的值

热门文章

  1. java凯撒密码_JAVA凯撒密码 选择问题
  2. 关于 tomcat启动后无法访问的问题(localhost:8080 (or your port specified))
  3. 通过aws部署推荐系统_通过AWS Elastic Beanstalk轻松进行Spring Boot部署
  4. posman mocks_使用Mocks进行需求驱动的软件开发
  5. android wtf_WTF连接池
  6. java jdk 序列化_JDK 11:Java序列化的终结开始了吗?
  7. xp系统 javafx_使用JavaFX构建React系统
  8. hibernate性能_改善Hibernate应用程序性能的7种方法
  9. HATEOAS的RESTful服务。 超媒体:REST的秘密要素
  10. Spring Boot:构建一个RESTful Web应用程序