diff --git a/jee7/src/main/java/com/baeldung/json/Person.java b/jee7/src/main/java/com/baeldung/json/Person.java new file mode 100644 index 0000000000..847597b6f5 --- /dev/null +++ b/jee7/src/main/java/com/baeldung/json/Person.java @@ -0,0 +1,43 @@ +package com.baeldung.json; + +import java.util.Date; +import java.util.List; + +public class Person { + private String firstName; + private String lastName; + private Date birthdate; + private List emails; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Date getBirthdate() { + return birthdate; + } + + public void setBirthdate(Date birthdate) { + this.birthdate = birthdate; + } + + public List getEmails() { + return emails; + } + + public void setEmails(List emails) { + this.emails = emails; + } +} diff --git a/jee7/src/main/java/com/baeldung/json/PersonBuilder.java b/jee7/src/main/java/com/baeldung/json/PersonBuilder.java new file mode 100644 index 0000000000..5d060827dc --- /dev/null +++ b/jee7/src/main/java/com/baeldung/json/PersonBuilder.java @@ -0,0 +1,49 @@ +package com.baeldung.json; + +import java.io.IOException; +import java.io.StringReader; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; + +import javax.json.Json; +import javax.json.JsonArray; +import javax.json.JsonObject; +import javax.json.JsonReader; +import javax.json.JsonString; + +public class PersonBuilder { + private String jsonString; + + private SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); + + public PersonBuilder(String jsonString) { + this.jsonString = jsonString; + } + + public Person build() throws IOException, ParseException { + JsonReader reader = Json.createReader(new StringReader(jsonString)); + + JsonObject jsonObject = reader.readObject(); + + Person person = new Person(); + + person.setFirstName(jsonObject.getString("firstName")); + person.setLastName(jsonObject.getString("lastName")); + person.setBirthdate(dateFormat.parse(jsonObject.getString("birthdate"))); + + JsonArray emailsJson = jsonObject.getJsonArray("emails"); + + List emails = new ArrayList<>(); + + for (JsonString j : emailsJson.getValuesAs(JsonString.class)) { + emails.add(j.getString()); + } + + person.setEmails(emails); + + return person; + } + +} diff --git a/jee7/src/main/java/com/baeldung/json/PersonWriter.java b/jee7/src/main/java/com/baeldung/json/PersonWriter.java new file mode 100644 index 0000000000..f94c02d613 --- /dev/null +++ b/jee7/src/main/java/com/baeldung/json/PersonWriter.java @@ -0,0 +1,67 @@ +package com.baeldung.json; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; + +import javax.json.Json; +import javax.json.JsonArrayBuilder; +import javax.json.JsonObject; +import javax.json.JsonObjectBuilder; +import javax.json.JsonWriterFactory; +import javax.json.stream.JsonGenerator; + +public class PersonWriter { + private Person person; + + private SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); + + public PersonWriter(Person person) { + this.person = person; + } + + public String write() throws IOException { + JsonObjectBuilder objectBuilder = Json.createObjectBuilder() + .add("firstName", person.getFirstName()) + .add("lastName", person.getLastName()) + .add("birthdate", dateFormat.format(person.getBirthdate())); + + JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); + + for(String email : person.getEmails()) { + arrayBuilder.add(email); + } + + objectBuilder.add("emails", arrayBuilder); + + JsonObject jsonObject = objectBuilder.build(); + + JsonWriterFactory writerFactory = createWriterFactory(); + + String jsonString = writeToString(jsonObject, writerFactory); + + return jsonString; + + } + + private String writeToString(JsonObject jsonObject, JsonWriterFactory writerFactory) throws IOException { + String jsonString; + try(Writer writer = new StringWriter()) { + writerFactory.createWriter(writer).write(jsonObject); + jsonString = writer.toString(); + } + return jsonString; + } + + private JsonWriterFactory createWriterFactory() { + Map config = new HashMap<>(); + + config.put(JsonGenerator.PRETTY_PRINTING, true); + + JsonWriterFactory writerFactory = Json.createWriterFactory(config); + return writerFactory; + } +} diff --git a/jee7/src/test/java/com/baeldug/json/JsonUnitTest.java b/jee7/src/test/java/com/baeldug/json/JsonUnitTest.java new file mode 100644 index 0000000000..04e9cef766 --- /dev/null +++ b/jee7/src/test/java/com/baeldug/json/JsonUnitTest.java @@ -0,0 +1,135 @@ +package com.baeldug.json; + +import static org.hamcrest.CoreMatchers.hasItems; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +import java.io.IOException; +import java.io.StringReader; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.JsonReader; +import javax.json.stream.JsonParser; +import javax.json.stream.JsonParser.Event; + +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.json.Person; +import com.baeldung.json.PersonBuilder; +import com.baeldung.json.PersonWriter; + +public class JsonUnitTest { + private Person person; + + private SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); + private String personJson; + private String petshopJson; + + @Test + public void whenPersonIsConvertedToString_thenAValidJsonStringIsReturned() throws IOException { + String generatedJsonString = new PersonWriter(person).write(); + + assertEquals( + "Generated String has the expected format and content", + personJson, + generatedJsonString); + } + + @Test + public void whenJsonStringIsConvertedToPerson_thenAValidObjectIsReturned( + ) throws IOException, ParseException { + Person person = new PersonBuilder(personJson).build(); + + assertEquals("First name has expected value", "Michael", person.getFirstName()); + assertEquals("Last name has expected value", "Scott", person.getLastName()); + assertEquals( + "Birthdate has expected value", + dateFormat.parse("06/15/1978"), + person.getBirthdate()); + assertThat( + "Email list has two items", + person.getEmails(), + hasItems("michael.scott@dd.com", "michael.scarn@gmail.com")); + } + + @Test + public void whenUsingObjectModelToQueryForSpecificProperty_thenExpectedValueIsReturned( + ) throws IOException, ParseException { + JsonReader reader = Json.createReader(new StringReader(petshopJson)); + + JsonObject jsonObject = reader.readObject(); + + assertEquals( + "The query should return the 'name' property of the third pet from the list", + "Jake", + jsonObject.getJsonArray("pets").getJsonObject(2).getString("name")); + } + + @Test + public void whenUsingStreamingApiToQueryForSpecificProperty_thenExpectedValueIsReturned( + ) throws IOException, ParseException { + JsonParser jsonParser = Json.createParser(new StringReader(petshopJson)); + + int count = 0; + String result = null; + + while(jsonParser.hasNext()) { + Event e = jsonParser.next(); + + if (e == Event.KEY_NAME) { + if(jsonParser.getString().equals("name")) { + jsonParser.next(); + + if(++count == 3) { + result = jsonParser.getString(); + break; + } + } + } + } + + assertEquals( + "The query should return the 'name' property of the third pet from the list", + "Jake", + result); + } + + @Before + public void init() throws ParseException { + // Creates a Person object + person = new Person(); + + person.setFirstName("Michael"); + person.setLastName("Scott"); + person.setBirthdate(dateFormat.parse("06/15/1978")); + person.setEmails(Arrays.asList("michael.scott@dd.com", "michael.scarn@gmail.com")); + + // Initializes the Person Json + personJson = "\n" + + "{\n" + + " \"firstName\":\"Michael\",\n" + + " \"lastName\":\"Scott\",\n" + + " \"birthdate\":\"06/15/1978\",\n" + + " \"emails\":[\n" + + " \"michael.scott@dd.com\",\n" + + " \"michael.scarn@gmail.com\"\n" + + " ]\n" + + "}"; + + // Initializes the Pet Shop Json + petshopJson = "\n" + + "{\n" + + " \"ownerId\":\"1\", \n" + + " \"pets\":[ \n" + + " {\"name\": \"Kitty\", \"type\": \"cat\"}, \n" + + " {\"name\": \"Rex\", \"type\": \"dog\"}, \n" + + " {\"name\": \"Jake\", \"type\": \"dog\"} \n" + + " ]\n" + + "}"; + } +}