网站访客记录 是后台做吗,网站建设效益,网站建设需要学那些,唯wordpresseclipselink用于JSON处理的Java API#xff08;JSR-353#xff09;是作为Java EE 7的一部分引入的用于生成和使用JSON的Java标准。JSR-353包括对象#xff08;类似于DOM#xff09;和流#xff08;类似于StAX#xff09;API。 在本文中#xff0c;我将演示我们在Eclipse… eclipselink 用于JSON处理的Java APIJSR-353是作为Java EE 7的一部分引入的用于生成和使用JSON的Java标准。JSR-353包括对象类似于DOM和流类似于StAXAPI。 在本文中我将演示我们在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模型 以下是我们将在本文中使用的简单客户模型。 注意在此示例中我们仅使用标准的JAXBJSR-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 ListPhoneNumber phoneNumbers new ArrayListPhoneNumber();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(nillabletrue)public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName lastName;}XmlElementpublic ListPhoneNumber 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.factoryorg.eclipse.persistence.jaxb.JAXBContextFactory元帅演示 在下面的演示代码中我们将结合使用JSR-353和MOXy API来生成JSON。 JSR-353的JsonObjectBuilder和JsonArrayBuilder用于生成JsonObject和JsonArray的实例。 通过将MOXy包装在MOXy的JsonObjectBuilderResult和JsonArrayBuilderResult实例中我们可以使用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) MarshallerMapString, Object jaxbProperties new HashMapString, 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 CustomerListPhoneNumber phoneNumbers new ArrayListPhoneNumber(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 Customers 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.outMapString, Object jsonProperties new HashMapString, 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 JsonStructure JsonObject或JsonArray 解组。 要做到这一点只需换歼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) UnmarshallerMapString, Object jaxbProperties new HashMapString, 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);ListCustomer customers (ListCustomer) 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.htmleclipselink