From 00fbedfee2e450803cc97d6992ab8ae769930695 Mon Sep 17 00:00:00 2001 From: panagiotiskakos Date: Thu, 23 Jun 2022 08:38:36 +0300 Subject: [PATCH 1/7] Added/created parent module (json-modules) --- json-modules/README.md | 3 +++ json-modules/pom.xml | 30 ++++++++++++++++++++++++++++++ pom.xml | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 json-modules/README.md create mode 100644 json-modules/pom.xml diff --git a/json-modules/README.md b/json-modules/README.md new file mode 100644 index 000000000000..a7100c40c855 --- /dev/null +++ b/json-modules/README.md @@ -0,0 +1,3 @@ +## JSON + +This module contains modules about JSON. diff --git a/json-modules/pom.xml b/json-modules/pom.xml new file mode 100644 index 000000000000..57f95ddb4a43 --- /dev/null +++ b/json-modules/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + json-modules + 1.0.0-SNAPSHOT + json-modules + pom + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4b96a48fc02c..3200b8ae2f1d 100644 --- a/pom.xml +++ b/pom.xml @@ -447,6 +447,7 @@ java-native jooby jsf + json-modules json json-2 json-path @@ -887,6 +888,7 @@ java-native jooby jsf + json-modules json json-2 json-path From 282f7ef2170d461ea8163b08bac1539b470bd599 Mon Sep 17 00:00:00 2001 From: panagiotiskakos Date: Thu, 23 Jun 2022 08:48:21 +0300 Subject: [PATCH 2/7] moved json(submodule) to json-modules(parent) --- json-modules/json/README.md | 16 ++ json-modules/json/pom.xml | 84 ++++++++ .../com/baeldung/adapter/PersonAdapter.java | 26 +++ .../java/com/baeldung/escape/JsonEscape.java | 41 ++++ .../main/java/com/baeldung/jsonb/Person.java | 127 ++++++++++++ .../java/com/baeldung/jsonjava/CDLDemo.java | 59 ++++++ .../com/baeldung/jsonjava/CookieDemo.java | 30 +++ .../java/com/baeldung/jsonjava/DemoBean.java | 26 +++ .../java/com/baeldung/jsonjava/HTTPDemo.java | 27 +++ .../com/baeldung/jsonjava/JSONArrayDemo.java | 52 +++++ .../jsonjava/JSONArrayGetValueByKey.java | 30 +++ .../com/baeldung/jsonjava/JSONObjectDemo.java | 46 +++++ .../baeldung/jsonjava/JSONTokenerDemo.java | 13 ++ .../baeldung/jsonjava/ObjectToFromJSON.java | 21 ++ .../iterate/JSONObjectIterator.java | 50 +++++ .../baeldung/jsonpointer/JsonPointerCrud.java | 95 +++++++++ .../json/src/main/resources/logback.xml | 13 ++ json-modules/json/src/main/webapp/index.html | 27 +++ json-modules/json/src/main/webapp/js/app.js | 15 ++ .../json/src/main/webapp/js/schema.js | 27 +++ .../json/src/main/webapp/js/ui-schema.js | 22 ++ .../json/src/main/webapp/package.json | 11 + .../baeldung/escape/JsonEscapeUnitTest.java | 36 ++++ .../json/schema/JSONSchemaUnitTest.java | 32 +++ .../com/baeldung/jsonb/JsonbUnitTest.java | 189 ++++++++++++++++++ .../baeldung/jsonjava/CDLIntegrationTest.java | 62 ++++++ .../jsonjava/CookieIntegrationTest.java | 34 ++++ .../jsonjava/HTTPIntegrationTest.java | 29 +++ .../JSONArrayGetValueByKeyUnitTest.java | 35 ++++ .../jsonjava/JSONArrayIntegrationTest.java | 53 +++++ .../jsonjava/JSONObjectIntegrationTest.java | 45 +++++ .../jsonjava/JSONTokenerIntegrationTest.java | 22 ++ .../ObjectToFromJSONIntegrationTest.java | 22 ++ .../iterate/JSONObjectIteratorUnitTest.java | 79 ++++++++ .../jsonpointer/JsonPointerCrudUnitTest.java | 59 ++++++ .../json/src/test/resources/address.json | 4 + .../json/src/test/resources/books.json | 7 + .../src/test/resources/product_invalid.json | 5 + .../src/test/resources/product_valid.json | 5 + .../json/src/test/resources/schema.json | 22 ++ json-modules/pom.xml | 3 + pom.xml | 2 - 42 files changed, 1601 insertions(+), 2 deletions(-) create mode 100644 json-modules/json/README.md create mode 100644 json-modules/json/pom.xml create mode 100644 json-modules/json/src/main/java/com/baeldung/adapter/PersonAdapter.java create mode 100644 json-modules/json/src/main/java/com/baeldung/escape/JsonEscape.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonb/Person.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/CDLDemo.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/CookieDemo.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/DemoBean.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java create mode 100644 json-modules/json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java create mode 100644 json-modules/json/src/main/resources/logback.xml create mode 100644 json-modules/json/src/main/webapp/index.html create mode 100644 json-modules/json/src/main/webapp/js/app.js create mode 100644 json-modules/json/src/main/webapp/js/schema.js create mode 100644 json-modules/json/src/main/webapp/js/ui-schema.js create mode 100644 json-modules/json/src/main/webapp/package.json create mode 100644 json-modules/json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java create mode 100644 json-modules/json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java create mode 100644 json-modules/json/src/test/resources/address.json create mode 100644 json-modules/json/src/test/resources/books.json create mode 100644 json-modules/json/src/test/resources/product_invalid.json create mode 100644 json-modules/json/src/test/resources/product_valid.json create mode 100644 json-modules/json/src/test/resources/schema.json diff --git a/json-modules/json/README.md b/json-modules/json/README.md new file mode 100644 index 000000000000..73db055679df --- /dev/null +++ b/json-modules/json/README.md @@ -0,0 +1,16 @@ +## JSON + +This module contains articles about JSON. + +### Relevant Articles: +- [Introduction to JSON Schema in Java](https://www.baeldung.com/introduction-to-json-schema-in-java) +- [Introduction to JSONForms](https://www.baeldung.com/introduction-to-jsonforms) +- [Introduction to JsonPath](https://www.baeldung.com/guide-to-jayway-jsonpath) +- [Introduction to JSON-Java (org.json)](https://www.baeldung.com/java-org-json) +- [Overview of JSON Pointer](https://www.baeldung.com/json-pointer) +- [Introduction to the JSON Binding API (JSR 367) in Java](https://www.baeldung.com/java-json-binding-api) +- [Get a Value by Key in a JSONArray](https://www.baeldung.com/java-jsonarray-get-value-by-key) +- [Iterating Over an Instance of org.json.JSONObject](https://www.baeldung.com/jsonobject-iteration) +- [Escape JSON String in Java](https://www.baeldung.com/java-json-escaping) +- [Reducing JSON Data Size](https://www.baeldung.com/json-reduce-data-size) +- More Articles: [[next -->]](../json-2) diff --git a/json-modules/json/pom.xml b/json-modules/json/pom.xml new file mode 100644 index 000000000000..04a00598a3e8 --- /dev/null +++ b/json-modules/json/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + org.baeldung + json + 0.0.1-SNAPSHOT + json + + + com.baeldung + json-modules + 1.0.0-SNAPSHOT + + + + + org.everit.json + org.everit.json.schema + ${everit.json.schema.version} + + + commons-logging + commons-logging + + + + + org.json + json + ${json.version} + + + com.google.code.gson + gson + ${gson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + javax.json.bind + javax.json.bind-api + ${jsonb-api.version} + + + org.glassfish + javax.json + ${javax.version} + + + org.eclipse + yasson + ${yasson.version} + + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + test + + + net.javacrumbs.json-unit + json-unit-assertj + ${json-unit-assertj.version} + test + + + + + 1.4.1 + 1.0 + 1.0.1 + 20211205 + 2.8.5 + 1.1.2 + 2.28.0 + + + \ No newline at end of file diff --git a/json-modules/json/src/main/java/com/baeldung/adapter/PersonAdapter.java b/json-modules/json/src/main/java/com/baeldung/adapter/PersonAdapter.java new file mode 100644 index 000000000000..dfab2eb0d200 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/adapter/PersonAdapter.java @@ -0,0 +1,26 @@ +package com.baeldung.adapter; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.bind.adapter.JsonbAdapter; + +import com.baeldung.jsonb.Person; + +public class PersonAdapter implements JsonbAdapter { + + @Override + public JsonObject adaptToJson(Person p) throws Exception { + return Json.createObjectBuilder() + .add("id", p.getId()) + .add("name", p.getName()) + .build(); + } + + @Override + public Person adaptFromJson(JsonObject adapted) throws Exception { + Person person = new Person(); + person.setId(adapted.getInt("id")); + person.setName(adapted.getString("name")); + return person; + } +} \ No newline at end of file diff --git a/json-modules/json/src/main/java/com/baeldung/escape/JsonEscape.java b/json-modules/json/src/main/java/com/baeldung/escape/JsonEscape.java new file mode 100644 index 000000000000..1e5f0d87cba4 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/escape/JsonEscape.java @@ -0,0 +1,41 @@ +package com.baeldung.escape; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.JsonObject; +import org.json.JSONObject; + +class JsonEscape { + + String escapeJson(String input) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("message", input); + return jsonObject.toString(); + } + + String escapeGson(String input) { + JsonObject gsonObject = new JsonObject(); + gsonObject.addProperty("message", input); + return gsonObject.toString(); + } + + String escapeJackson(String input) throws JsonProcessingException { + return new ObjectMapper().writeValueAsString(new Payload(input)); + } + + static class Payload { + String message; + + Payload(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + } +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonb/Person.java b/json-modules/json/src/main/java/com/baeldung/jsonb/Person.java new file mode 100644 index 000000000000..a506c1b0003f --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonb/Person.java @@ -0,0 +1,127 @@ +package com.baeldung.jsonb; + +import java.math.BigDecimal; +import java.time.LocalDate; + +import javax.json.bind.annotation.JsonbDateFormat; +import javax.json.bind.annotation.JsonbNumberFormat; +import javax.json.bind.annotation.JsonbProperty; +import javax.json.bind.annotation.JsonbTransient; + +public class Person { + + private int id; + @JsonbProperty("person-name") + private String name; + @JsonbProperty(nillable = true) + private String email; + @JsonbTransient + private int age; + @JsonbDateFormat("dd-MM-yyyy") + private LocalDate registeredDate; + private BigDecimal salary; + + public Person() { + this(0, "", "", 0, LocalDate.now(), new BigDecimal(0)); + } + + public Person(int id, String name, String email, int age, LocalDate registeredDate, BigDecimal salary) { + this.id = id; + this.name = name; + this.email = email; + this.age = age; + this.registeredDate = registeredDate; + this.salary = salary; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @JsonbNumberFormat(locale = "en_US", value = "#0.0") + public BigDecimal getSalary() { + return salary; + } + + public void setSalary(BigDecimal salary) { + this.salary = salary; + } + + public LocalDate getRegisteredDate() { + return registeredDate; + } + + public void setRegisteredDate(LocalDate registeredDate) { + this.registeredDate = registeredDate; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Person [id="); + builder.append(id); + builder.append(", name="); + builder.append(name); + builder.append(", email="); + builder.append(email); + builder.append(", age="); + builder.append(age); + builder.append(", registeredDate="); + builder.append(registeredDate); + builder.append(", salary="); + builder.append(salary); + builder.append("]"); + return builder.toString(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + id; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Person other = (Person) obj; + if (id != other.id) + return false; + return true; + } + +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/CDLDemo.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/CDLDemo.java new file mode 100644 index 000000000000..6f4b2dacf7a7 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/CDLDemo.java @@ -0,0 +1,59 @@ +package com.baeldung.jsonjava; + +import org.json.CDL; +import org.json.JSONArray; +import org.json.JSONTokener; + +public class CDLDemo { + public static void main(String[] args) { + System.out.println("8.1. Producing JSONArray Directly from Comma Delimited Text: "); + jsonArrayFromCDT(); + + System.out.println("\n8.2. Producing Comma Delimited Text from JSONArray: "); + cDTfromJSONArray(); + + System.out.println("\n8.3.1. Producing JSONArray of JSONObjects Using Comma Delimited Text: "); + jaOfJOFromCDT2(); + + System.out.println("\n8.3.2. Producing JSONArray of JSONObjects Using Comma Delimited Text: "); + jaOfJOFromCDT2(); + } + + public static void jsonArrayFromCDT() { + JSONArray ja = CDL.rowToJSONArray(new JSONTokener("England, USA, Canada")); + System.out.println(ja); + } + + public static void cDTfromJSONArray() { + JSONArray ja = new JSONArray("[\"England\",\"USA\",\"Canada\"]"); + String cdt = CDL.rowToString(ja); + System.out.println(cdt); + } + + public static void jaOfJOFromCDT() { + String string = + "name, city, age \n" + + "john, chicago, 22 \n" + + "gary, florida, 35 \n" + + "sal, vegas, 18"; + + JSONArray result = CDL.toJSONArray(string); + System.out.println(result.toString()); + } + + public static void jaOfJOFromCDT2() { + JSONArray ja = new JSONArray(); + ja.put("name"); + ja.put("city"); + ja.put("age"); + + String string = + "john, chicago, 22 \n" + + "gary, florida, 35 \n" + + "sal, vegas, 18"; + + JSONArray result = CDL.toJSONArray(ja, string); + System.out.println(result.toString()); + } + +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/CookieDemo.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/CookieDemo.java new file mode 100644 index 000000000000..96a479541cce --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/CookieDemo.java @@ -0,0 +1,30 @@ +package com.baeldung.jsonjava; + +import org.json.Cookie; +import org.json.JSONObject; + +public class CookieDemo { + public static void main(String[] args) { + System.out.println("9.1. Converting a Cookie String into a JSONObject"); + cookieStringToJSONObject(); + + System.out.println("\n9.2. Converting a JSONObject into Cookie String"); + jSONObjectToCookieString(); + } + + public static void cookieStringToJSONObject() { + String cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; + JSONObject cookieJO = Cookie.toJSONObject(cookie); + System.out.println(cookieJO); + } + + public static void jSONObjectToCookieString() { + JSONObject cookieJO = new JSONObject(); + cookieJO.put("name", "username"); + cookieJO.put("value", "John Doe"); + cookieJO.put("expires", "Thu, 18 Dec 2013 12:00:00 UTC"); + cookieJO.put("path", "/"); + String cookie = Cookie.toString(cookieJO); + System.out.println(cookie); + } +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/DemoBean.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/DemoBean.java new file mode 100644 index 000000000000..6d27b329c240 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/DemoBean.java @@ -0,0 +1,26 @@ +package com.baeldung.jsonjava; + +public class DemoBean { + private int id; + private String name; + private boolean active; + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public boolean isActive() { + return active; + } + public void setActive(boolean active) { + this.active = active; + } +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java new file mode 100644 index 000000000000..5c6f684d634c --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java @@ -0,0 +1,27 @@ +package com.baeldung.jsonjava; + +import org.json.HTTP; +import org.json.JSONObject; + +public class HTTPDemo { + public static void main(String[] args) { + System.out.println("10.1. Converting JSONObject to HTTP Header: "); + jSONObjectToHTTPHeader(); + + System.out.println("\n10.2. Converting HTTP Header String Back to JSONObject: "); + hTTPHeaderToJSONObject(); + } + + public static void jSONObjectToHTTPHeader() { + JSONObject jo = new JSONObject(); + jo.put("Method", "POST"); + jo.put("Request-URI", "http://www.example.com/"); + jo.put("HTTP-Version", "HTTP/1.1"); + System.out.println(HTTP.toString(jo)); + } + + public static void hTTPHeaderToJSONObject() { + JSONObject obj = HTTP.toJSONObject("POST \"http://www.example.com/\" HTTP/1.1"); + System.out.println(obj); + } +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java new file mode 100644 index 000000000000..a7341c8d9d95 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java @@ -0,0 +1,52 @@ +package com.baeldung.jsonjava; + +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONArray; +import org.json.JSONObject; + +public class JSONArrayDemo { + public static void main(String[] args) { + System.out.println("6.1. Creating JSON Array: "); + creatingJSONArray(); + + System.out.println("\n6.2. Creating JSON Array from JSON string: "); + jsonArrayFromJSONString(); + + System.out.println("\n6.3. Creating JSON Array from Collection Object: "); + jsonArrayFromCollectionObj(); + } + + public static void creatingJSONArray() { + JSONArray ja = new JSONArray(); + ja.put(Boolean.TRUE); + ja.put("lorem ipsum"); + + // We can also put a JSONObject in JSONArray + JSONObject jo = new JSONObject(); + jo.put("name", "jon doe"); + jo.put("age", "22"); + jo.put("city", "chicago"); + + ja.put(jo); + + System.out.println(ja.toString()); + } + + public static void jsonArrayFromJSONString() { + JSONArray ja = new JSONArray("[true, \"lorem ipsum\", 215]"); + System.out.println(ja); + } + + public static void jsonArrayFromCollectionObj() { + List list = new ArrayList<>(); + list.add("California"); + list.add("Texas"); + list.add("Hawaii"); + list.add("Alaska"); + + JSONArray ja = new JSONArray(list); + System.out.println(ja); + } +} \ No newline at end of file diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java new file mode 100644 index 000000000000..b3df318e22dd --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java @@ -0,0 +1,30 @@ +package com.baeldung.jsonjava; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import org.json.JSONArray; +import org.json.JSONObject; + +public class JSONArrayGetValueByKey { + + public List getValuesByKeyInJSONArray(String jsonArrayStr, String key) { + List values = new ArrayList<>(); + JSONArray jsonArray = new JSONArray(jsonArrayStr); + for (int idx = 0; idx < jsonArray.length(); idx++) { + JSONObject jsonObj = jsonArray.getJSONObject(idx); + values.add(jsonObj.optString(key)); + } + return values; + } + + public List getValuesByKeyInJSONArrayUsingJava8(String jsonArrayStr, String key) { + JSONArray jsonArray = new JSONArray(jsonArrayStr); + return IntStream.range(0, jsonArray.length()) + .mapToObj(index -> ((JSONObject) jsonArray.get(index)).optString(key)) + .collect(Collectors.toList()); + } + +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java new file mode 100644 index 000000000000..8aa1d41afb54 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java @@ -0,0 +1,46 @@ +package com.baeldung.jsonjava; + +import java.util.HashMap; +import java.util.Map; + +import org.json.JSONObject; + +public class JSONObjectDemo { + public static void main(String[] args) { + System.out.println("4.1. Creating JSONObject: "); + jsonFromJSONObject(); + + System.out.println("\n4.2. Creating JSONObject from Map: "); + jsonFromMap(); + + System.out.println("\n4.3. Creating JSONObject from JSON string: "); + jsonFromJSONString(); + } + + public static void jsonFromJSONObject() { + JSONObject jo = new JSONObject(); + jo.put("name", "jon doe"); + jo.put("age", "22"); + jo.put("city", "chicago"); + + System.out.println(jo.toString()); + } + + public static void jsonFromMap() { + Map map = new HashMap<>(); + map.put("name", "jon doe"); + map.put("age", "22"); + map.put("city", "chicago"); + JSONObject jo = new JSONObject(map); + + System.out.println(jo.toString()); + } + + public static void jsonFromJSONString() { + JSONObject jo = new JSONObject( + "{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}" + ); + + System.out.println(jo.toString()); + } +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java new file mode 100644 index 000000000000..fb9fea959c3c --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java @@ -0,0 +1,13 @@ +package com.baeldung.jsonjava; + +import org.json.JSONTokener; + +public class JSONTokenerDemo { + public static void main(String[] args) { + JSONTokener jt = new JSONTokener("Sample String"); + + while(jt.more()) { + System.out.println(jt.next()); + } + } +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java b/json-modules/json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java new file mode 100644 index 000000000000..e9820c462a4c --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java @@ -0,0 +1,21 @@ +package com.baeldung.jsonjava; + +import org.json.JSONObject; + +public class ObjectToFromJSON { + + public static void main(String args[]) throws Exception { + System.out.println("\n5.1. Creating JSONObject from Java Bean: "); + jsonFromDemoBean(); + } + + public static void jsonFromDemoBean() { + DemoBean demo = new DemoBean(); + demo.setId(1); + demo.setName("lorem ipsum"); + demo.setActive(true); + + JSONObject jo = new JSONObject(demo); + System.out.println(jo); + } +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java b/json-modules/json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java new file mode 100644 index 000000000000..0d3ae3b02172 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java @@ -0,0 +1,50 @@ +package com.baeldung.jsonobject.iterate; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.json.JSONArray; +import org.json.JSONObject; + +public class JSONObjectIterator { + + private Map keyValuePairs; + + public JSONObjectIterator() { + keyValuePairs = new HashMap<>(); + } + + public void handleValue(String key, Object value) { + if (value instanceof JSONArray) { + handleJSONArray(key, (JSONArray) value); + } else if (value instanceof JSONObject) { + handleJSONObject((JSONObject) value); + } + keyValuePairs.put(key, value); + } + + public void handleJSONObject(JSONObject jsonObject) { + Iterator jsonObjectIterator = jsonObject.keys(); + jsonObjectIterator.forEachRemaining(key -> { + Object value = jsonObject.get(key); + handleValue(key, value); + }); + } + + public void handleJSONArray(String key, JSONArray jsonArray) { + Iterator jsonArrayIterator = jsonArray.iterator(); + jsonArrayIterator.forEachRemaining(element -> { + handleValue(key, element); + }); + } + + public Map getKeyValuePairs() { + return keyValuePairs; + } + + public void setKeyValuePairs(Map keyValuePairs) { + this.keyValuePairs = keyValuePairs; + } + +} diff --git a/json-modules/json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java b/json-modules/json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java new file mode 100644 index 000000000000..4398aa786763 --- /dev/null +++ b/json-modules/json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java @@ -0,0 +1,95 @@ +package com.baeldung.jsonpointer; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.JsonPointer; +import javax.json.JsonReader; +import javax.json.JsonString; +import javax.json.JsonStructure; + +public class JsonPointerCrud { + + private JsonStructure jsonStructure = null; + + public JsonPointerCrud(String fileName) throws IOException { + + try (JsonReader reader = Json.createReader(Files.newBufferedReader(Paths.get(fileName)))) { + jsonStructure = reader.read(); + } catch (FileNotFoundException e) { + System.out.println("Error to open json file: " + e.getMessage()); + } + + } + + public JsonPointerCrud(InputStream stream) { + + JsonReader reader = Json.createReader(stream); + jsonStructure = reader.read(); + reader.close(); + + } + + public JsonStructure insert(String key, String value) { + + JsonPointer jsonPointer = Json.createPointer("/" + key); + JsonString jsonValue = Json.createValue(value); + jsonStructure = jsonPointer.add(jsonStructure, jsonValue); + + return jsonStructure; + + } + + public JsonStructure update(String key, String newValue) { + + JsonPointer jsonPointer = Json.createPointer("/" + key); + JsonString jsonNewValue = Json.createValue(newValue); + jsonStructure = jsonPointer.replace(jsonStructure, jsonNewValue); + + return jsonStructure; + } + + public JsonStructure delete(String key) { + + JsonPointer jsonPointer = Json.createPointer("/" + key); + jsonPointer.getValue(jsonStructure); + jsonStructure = jsonPointer.remove(jsonStructure); + + return jsonStructure; + + } + + public String fetchValueFromKey(String key) { + JsonPointer jsonPointer = Json.createPointer("/" + key); + JsonString jsonString = (JsonString) jsonPointer.getValue(jsonStructure); + + return jsonString.getString(); + } + + public String fetchListValues(String key) { + JsonPointer jsonPointer = Json.createPointer("/" + key); + JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); + + return jsonObject.toString(); + } + + public String fetchFullJSON() { + JsonPointer jsonPointer = Json.createPointer(""); + JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); + + return jsonObject.toString(); + + } + + public boolean check(String key) { + JsonPointer jsonPointer = Json.createPointer("/" + key); + boolean found = jsonPointer.containsValue(jsonStructure); + + return found; + } +} diff --git a/json-modules/json/src/main/resources/logback.xml b/json-modules/json/src/main/resources/logback.xml new file mode 100644 index 000000000000..7d900d8ea884 --- /dev/null +++ b/json-modules/json/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/json-modules/json/src/main/webapp/index.html b/json-modules/json/src/main/webapp/index.html new file mode 100644 index 000000000000..5c41c8a1739d --- /dev/null +++ b/json-modules/json/src/main/webapp/index.html @@ -0,0 +1,27 @@ + + + + Introduction to JSONForms + + + + + + +
+
+
+
+
+

Introduction to JSONForms

+
+
+ Bound data: {{data}} + +
+
+
+
+
+ + diff --git a/json-modules/json/src/main/webapp/js/app.js b/json-modules/json/src/main/webapp/js/app.js new file mode 100644 index 000000000000..484637bef49c --- /dev/null +++ b/json-modules/json/src/main/webapp/js/app.js @@ -0,0 +1,15 @@ +'use strict'; + +var app = angular.module('jsonforms-intro', ['jsonforms']); +app.controller('MyController', ['$scope', 'Schema', 'UISchema', function($scope, Schema, UISchema) { + + $scope.schema = Schema; + + $scope.uiSchema = UISchema; + + $scope.data = { + "id": 1, + "name": "Lampshade", + "price": 1.85 + }; +}]); diff --git a/json-modules/json/src/main/webapp/js/schema.js b/json-modules/json/src/main/webapp/js/schema.js new file mode 100644 index 000000000000..34025868b948 --- /dev/null +++ b/json-modules/json/src/main/webapp/js/schema.js @@ -0,0 +1,27 @@ +'use strict'; + +var app = angular.module('jsonforms-intro'); +app.value('Schema', + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Product", + "description": "A product from the catalog", + "type": "object", + "properties": { + "id": { + "description": "The unique identifier for a product", + "type": "integer" + }, + "name": { + "description": "Name of the product", + "type": "string" + }, + "price": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + }, + "required": ["id", "name", "price"] + } +); diff --git a/json-modules/json/src/main/webapp/js/ui-schema.js b/json-modules/json/src/main/webapp/js/ui-schema.js new file mode 100644 index 000000000000..aea5ac79c0c2 --- /dev/null +++ b/json-modules/json/src/main/webapp/js/ui-schema.js @@ -0,0 +1,22 @@ +'use strict'; + +var app = angular.module('jsonforms-intro'); +app.value('UISchema', + { + "type": "HorizontalLayout", + "elements": [ + { + "type": "Control", + "scope": { "$ref": "#/properties/id" } + }, + { + "type": "Control", + "scope": { "$ref": "#/properties/name" } + }, + { + "type": "Control", + "scope": { "$ref": "#/properties/price" } + }, + ] + } +); diff --git a/json-modules/json/src/main/webapp/package.json b/json-modules/json/src/main/webapp/package.json new file mode 100644 index 000000000000..5dae00059373 --- /dev/null +++ b/json-modules/json/src/main/webapp/package.json @@ -0,0 +1,11 @@ +{ + "name": "jsonforms-intro", + "description": "Introduction to JSONForms", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "typings": "0.6.5", + "jsonforms": "0.0.19", + "bootstrap": "3.3.6" + } +} \ No newline at end of file diff --git a/json-modules/json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java b/json-modules/json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java new file mode 100644 index 000000000000..e959fa227b63 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.escape; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class JsonEscapeUnitTest { + + private JsonEscape testedInstance; + private static final String EXPECTED = "{\"message\":\"Hello \\\"World\\\"\"}"; + + @BeforeEach + void setUp() { + testedInstance = new JsonEscape(); + } + + @Test + void escapeJson() { + String actual = testedInstance.escapeJson("Hello \"World\""); + assertEquals(EXPECTED, actual); + } + + @Test + void escapeGson() { + String actual = testedInstance.escapeGson("Hello \"World\""); + assertEquals(EXPECTED, actual); + } + + @Test + void escapeJackson() throws JsonProcessingException { + String actual = testedInstance.escapeJackson("Hello \"World\""); + assertEquals(EXPECTED, actual); + } +} \ No newline at end of file diff --git a/json-modules/json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java b/json-modules/json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java new file mode 100644 index 000000000000..393e052b95ba --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.json.schema; + +import org.everit.json.schema.Schema; +import org.everit.json.schema.ValidationException; +import org.everit.json.schema.loader.SchemaLoader; + +import org.json.JSONObject; +import org.json.JSONTokener; +import org.junit.Test; + +public class JSONSchemaUnitTest { + + @Test(expected = ValidationException.class) + public void givenInvalidInput_whenValidating_thenInvalid() { + + JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/schema.json"))); + JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/product_invalid.json"))); + + Schema schema = SchemaLoader.load(jsonSchema); + schema.validate(jsonSubject); + } + + @Test + public void givenValidInput_whenValidating_thenValid() { + + JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/schema.json"))); + JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/product_valid.json"))); + + Schema schema = SchemaLoader.load(jsonSchema); + schema.validate(jsonSubject); + } +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java b/json-modules/json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java new file mode 100644 index 000000000000..f258700c6b47 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java @@ -0,0 +1,189 @@ +package com.baeldung.jsonb; + +import static org.junit.Assert.assertTrue; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.json.bind.Jsonb; +import javax.json.bind.JsonbBuilder; +import javax.json.bind.JsonbConfig; +import javax.json.bind.config.PropertyNamingStrategy; +import javax.json.bind.config.PropertyOrderStrategy; + +import org.apache.commons.collections4.ListUtils; +import org.junit.Test; + +import com.baeldung.adapter.PersonAdapter; +import com.baeldung.jsonb.Person; + +public class JsonbUnitTest { + + @Test + public void givenPersonList_whenSerializeWithJsonb_thenGetPersonJsonArray() { + Jsonb jsonb = JsonbBuilder.create(); + // @formatter:off + List personList = Arrays.asList( + new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), + new Person(2, "Jhon", "jhon1@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), + new Person(3, "Jhon", null, 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), + new Person(4, "Tom", "tom@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500))); + // @formatter:on + String jsonArrayPerson = jsonb.toJson(personList); + // @formatter:off + String jsonExpected = "[" + + "{\"email\":\"jhon@test.com\"," + + "\"id\":1,\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1000.0\"}," + + "{\"email\":\"jhon1@test.com\"," + + "\"id\":2,\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1500.0\"},{\"email\":null," + + "\"id\":3,\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1000.0\"}," + + "{\"email\":\"tom@test.com\"," + + "\"id\":4,\"person-name\":\"Tom\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1500.0\"}" + + "]"; + // @formatter:on + assertTrue(jsonArrayPerson.equals(jsonExpected)); + } + + @Test + public void givenPersonJsonArray_whenDeserializeWithJsonb_thenGetPersonList() { + Jsonb jsonb = JsonbBuilder.create(); + // @formatter:off + String personJsonArray = + "[" + + "{\"email\":\"jhon@test.com\"," + + "\"id\":1,\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1000.0\"}," + + "{\"email\":\"jhon1@test.com\"," + + "\"id\":2,\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1500.0\"},{\"email\":null," + + "\"id\":3,\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1000.0\"}," + + "{\"email\":\"tom@test.com\"," + + "\"id\":4,\"person-name\":\"Tom\"," + + "\"registeredDate\":\"09-09-2019\"," + + "\"salary\":\"1500.0\"}" + + "]"; + // @formatter:on + @SuppressWarnings("serial") + List personList = jsonb.fromJson(personJsonArray, new ArrayList() { + }.getClass() + .getGenericSuperclass()); + // @formatter:off + List personListExpected = Arrays.asList( + new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), + new Person(2, "Jhon", "jhon1@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), + new Person(3, "Jhon", null, 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), + new Person(4, "Tom", "tom@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500))); + // @formatter:on + assertTrue(ListUtils.isEqualList(personList, personListExpected)); + } + + @Test + public void givenPersonObject_whenNamingStrategy_thenGetCustomPersonJson() { + JsonbConfig config = new JsonbConfig().withPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE_WITH_UNDERSCORES); + Jsonb jsonb = JsonbBuilder.create(config); + Person person = new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); + String jsonPerson = jsonb.toJson(person); + // @formatter:off + String jsonExpected = + "{\"email\":\"jhon@test.com\"," + + "\"id\":1," + + "\"person-name\":\"Jhon\"," + + "\"registered_date\":\"07-09-2019\"," + + "\"salary\":\"1000.0\"}"; + // @formatter:on + assertTrue(jsonExpected.equals(jsonPerson)); + } + + @Test + public void givenPersonObject_whenWithPropertyOrderStrategy_thenGetReversePersonJson() { + JsonbConfig config = new JsonbConfig().withPropertyOrderStrategy(PropertyOrderStrategy.REVERSE); + Jsonb jsonb = JsonbBuilder.create(config); + Person person = new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); + String jsonPerson = jsonb.toJson(person); + // @formatter:off + String jsonExpected = + "{\"salary\":\"1000.0\","+ + "\"registeredDate\":\"07-09-2019\"," + + "\"person-name\":\"Jhon\"," + + "\"id\":1," + + "\"email\":\"jhon@test.com\"}"; + // @formatter:on + assertTrue(jsonExpected.equals(jsonPerson)); + } + + @Test + public void givenPersonObject_whenSerializeWithJsonb_thenGetPersonJson() { + Jsonb jsonb = JsonbBuilder.create(); + Person person = new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); + String jsonPerson = jsonb.toJson(person); + // @formatter:off + String jsonExpected = + "{\"email\":\"jhon@test.com\"," + + "\"id\":1," + + "\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"07-09-2019\"," + + "\"salary\":\"1000.0\"}"; + // @formatter:on + assertTrue(jsonExpected.equals(jsonPerson)); + } + + @Test + public void givenPersonJson_whenDeserializeWithJsonb_thenGetPersonObject() { + Jsonb jsonb = JsonbBuilder.create(); + Person person = new Person(1, "Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0)); + // @formatter:off + String jsonPerson = + "{\"email\":\"jhon@test.com\"," + + "\"id\":1," + + "\"person-name\":\"Jhon\"," + + "\"registeredDate\":\"07-09-2019\"," + + "\"salary\":\"1000.0\"}"; + // @formatter:on + assertTrue(jsonb.fromJson(jsonPerson, Person.class) + .equals(person)); + } + + @Test + public void givenPersonObject_whenSerializeWithAdapter_thenGetPersonJson() { + JsonbConfig config = new JsonbConfig().withAdapters(new PersonAdapter()); + Jsonb jsonb = JsonbBuilder.create(config); + Person person = new Person(1, "Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0));// new Person(1, "Jhon"); + String jsonPerson = jsonb.toJson(person); + // @formatter:off + String jsonExpected = + "{\"id\":1," + + "\"name\":\"Jhon\"}"; + // @formatter:on + assertTrue(jsonExpected.equals(jsonPerson)); + } + + @Test + public void givenPersonJson_whenDeserializeWithAdapter_thenGetPersonObject() { + JsonbConfig config = new JsonbConfig().withAdapters(new PersonAdapter()); + Jsonb jsonb = JsonbBuilder.create(config); + Person person = new Person(1, "Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0));// new Person(1, "Jhon"); + // @formatter:off + String jsonPerson = + "{\"id\":1," + + "\"name\":\"Jhon\"}"; + // @formatter:on + assertTrue(jsonb.fromJson(jsonPerson, Person.class) + .equals(person)); + } + +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java new file mode 100644 index 000000000000..4698b29c6e91 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java @@ -0,0 +1,62 @@ +package com.baeldung.jsonjava; + +import org.json.CDL; +import org.json.JSONArray; +import org.json.JSONTokener; +import org.junit.Test; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +public class CDLIntegrationTest { + + @Test + public void givenCommaDelimitedText_thenConvertToJSONArray() { + JSONArray ja = CDL.rowToJSONArray(new JSONTokener("England, USA, Canada")); + + assertThatJson(ja) + .isEqualTo("[\"England\",\"USA\",\"Canada\"]"); + } + + @Test + public void givenJSONArray_thenConvertToCommaDelimitedText() { + JSONArray ja = new JSONArray("[\"England\",\"USA\",\"Canada\"]"); + + String cdt = CDL.rowToString(ja); + + assertThat(cdt.trim()).isEqualTo("England,USA,Canada"); + } + + @Test + public void givenCommaDelimitedText_thenGetJSONArrayOfJSONObjects() { + String string = + "name, city, age \n" + + "john, chicago, 22 \n" + + "gary, florida, 35 \n" + + "sal, vegas, 18"; + + JSONArray result = CDL.toJSONArray(string); + + assertThatJson(result) + .isEqualTo("[{\"name\":\"john\",\"city\":\"chicago\",\"age\":\"22\"},{\"name\":\"gary\",\"city\":\"florida\",\"age\":\"35\"},{\"name\":\"sal\",\"city\":\"vegas\",\"age\":\"18\"}]"); + } + + @Test + public void givenCommaDelimitedText_thenGetJSONArrayOfJSONObjects2() { + JSONArray ja = new JSONArray(); + ja.put("name"); + ja.put("city"); + ja.put("age"); + + String string = + "john, chicago, 22 \n" + + "gary, florida, 35 \n" + + "sal, vegas, 18"; + + JSONArray result = CDL.toJSONArray(ja, string); + + assertThatJson(result) + .isEqualTo("[{\"name\":\"john\",\"city\":\"chicago\",\"age\":\"22\"},{\"name\":\"gary\",\"city\":\"florida\",\"age\":\"35\"},{\"name\":\"sal\",\"city\":\"vegas\",\"age\":\"18\"}]"); + } + +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java new file mode 100644 index 000000000000..accb94e7325f --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java @@ -0,0 +1,34 @@ +package com.baeldung.jsonjava; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +import org.json.Cookie; +import org.json.JSONObject; +import org.junit.Test; + +public class CookieIntegrationTest { + + @Test + public void givenCookieString_thenConvertToJSONObject() { + String cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; + JSONObject cookieJO = Cookie.toJSONObject(cookie); + + assertThatJson(cookieJO) + .isEqualTo("{\"path\":\"/\",\"expires\":\"Thu, 18 Dec 2013 12:00:00 UTC\",\"name\":\"username\",\"value\":\"John Doe\"}"); + } + + @Test + public void givenJSONObject_thenConvertToCookieString() { + JSONObject cookieJO = new JSONObject(); + cookieJO.put("name", "username"); + cookieJO.put("value", "John Doe"); + cookieJO.put("expires", "Thu, 18 Dec 2013 12:00:00 UTC"); + cookieJO.put("path", "/"); + + String cookie = Cookie.toString(cookieJO); + + assertThat(cookie.split(";")) + .containsExactlyInAnyOrder("username=John Doe", "path=/", "expires=Thu, 18 Dec 2013 12:00:00 UTC"); + } +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java new file mode 100644 index 000000000000..ad84c22cca01 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java @@ -0,0 +1,29 @@ +package com.baeldung.jsonjava; + +import org.json.HTTP; +import org.json.JSONObject; +import org.junit.Test; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +public class HTTPIntegrationTest { + @Test + public void givenJSONObject_thenConvertToHTTPHeader() { + JSONObject jo = new JSONObject(); + jo.put("Method", "POST"); + jo.put("Request-URI", "http://www.example.com/"); + jo.put("HTTP-Version", "HTTP/1.1"); + + assertThat(HTTP.toString(jo)) + .isEqualTo("POST \"http://www.example.com/\" HTTP/1.1" + HTTP.CRLF + HTTP.CRLF); + } + + @Test + public void givenHTTPHeader_thenConvertToJSONObject() { + JSONObject obj = HTTP.toJSONObject("POST \"http://www.example.com/\" HTTP/1.1"); + + assertThatJson(obj) + .isEqualTo("{\"Request-URI\":\"http://www.example.com/\",\"Method\":\"POST\",\"HTTP-Version\":\"HTTP/1.1\"}"); + } +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java new file mode 100644 index 000000000000..7ea22b94bae8 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.jsonjava; + +import org.junit.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class JSONArrayGetValueByKeyUnitTest { + + private static final JSONArrayGetValueByKey obj = new JSONArrayGetValueByKey(); + + @Test + public void givenJSONArrayAndAKey_thenReturnAllValuesForGivenKey() { + String jsonStr = "[" + " {" + " \"name\": \"John\"," + " \"city\": \"chicago\"," + " \"age\": \"22\" " + "}," + " { " + "\"name\": \"Gary\"," + " \"city\": \"florida\"," + " \"age\": \"35\" " + "}," + " { " + "\"name\": \"Selena\"," + + " \"city\": \"vegas\"," + " \"age\": \"18\" " + "} " + "]"; + + List actualValues = obj.getValuesByKeyInJSONArray(jsonStr, "name"); + + assertThat(actualValues) + .containsExactlyInAnyOrder("John", "Gary", "Selena"); + } + + @Test + public void givenJSONArrayAndAKey_whenUsingJava8Syntax_thenReturnAllValuesForGivenKey() { + String jsonStr = "[" + " {" + " \"name\": \"John\"," + " \"city\": \"chicago\"," + " \"age\": \"22\" " + "}," + " { " + "\"name\": \"Gary\"," + " \"city\": \"florida\"," + " \"age\": \"35\" " + "}," + " { " + "\"name\": \"Selena\"," + + " \"city\": \"vegas\"," + " \"age\": \"18\" " + "} " + "]"; + + List actualValues = obj.getValuesByKeyInJSONArrayUsingJava8(jsonStr, "name"); + + assertThat(actualValues) + .containsExactlyInAnyOrder("John", "Gary", "Selena"); + } + +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java new file mode 100644 index 000000000000..eed7779e2717 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java @@ -0,0 +1,53 @@ +package com.baeldung.jsonjava; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; + +public class JSONArrayIntegrationTest { + + @Test + public void givenJSONJava_thenCreateNewJSONArrayFromScratch() { + JSONArray ja = new JSONArray(); + ja.put(Boolean.TRUE); + ja.put("lorem ipsum"); + + // We can also put a JSONObject in JSONArray + JSONObject jo = new JSONObject(); + jo.put("name", "jon doe"); + jo.put("age", "22"); + jo.put("city", "chicago"); + + ja.put(jo); + + assertThatJson(ja) + .isEqualTo("[true,\"lorem ipsum\",{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}]"); + } + + @Test + public void givenJsonString_thenCreateNewJSONArray() { + JSONArray ja = new JSONArray("[true, \"lorem ipsum\", 215]"); + + assertThatJson(ja) + .isEqualTo("[true,\"lorem ipsum\",215]"); + } + + @Test + public void givenListObject_thenConvertItToJSONArray() { + List list = new ArrayList<>(); + list.add("California"); + list.add("Texas"); + list.add("Hawaii"); + list.add("Alaska"); + + JSONArray ja = new JSONArray(list); + + assertThatJson(ja) + .isEqualTo("[\"California\",\"Texas\",\"Hawaii\",\"Alaska\"]"); + } +} \ No newline at end of file diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java new file mode 100644 index 000000000000..4a435a90d3a5 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java @@ -0,0 +1,45 @@ +package com.baeldung.jsonjava; + +import org.json.JSONObject; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; + +public class JSONObjectIntegrationTest { + + @Test + public void givenJSONJava_thenCreateNewJSONObject() { + JSONObject jo = new JSONObject(); + jo.put("name", "jon doe"); + jo.put("age", "22"); + jo.put("city", "chicago"); + + assertThatJson(jo) + .isEqualTo("{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}"); + } + + @Test + public void givenMapObject_thenCreateJSONObject() { + Map map = new HashMap<>(); + map.put("name", "jon doe"); + map.put("age", "22"); + map.put("city", "chicago"); + JSONObject jo = new JSONObject(map); + + assertThatJson(jo) + .isEqualTo("{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}"); + } + + @Test + public void givenJsonString_thenCreateJSONObject() { + JSONObject jo = new JSONObject( + "{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}" + ); + + assertThatJson(jo) + .isEqualTo("{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}"); + } +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java new file mode 100644 index 000000000000..3bd73ca4c27d --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java @@ -0,0 +1,22 @@ +package com.baeldung.jsonjava; + +import org.json.JSONTokener; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class JSONTokenerIntegrationTest { + + @Test + public void givenString_convertItToJSONTokens() { + String str = "Sample String"; + JSONTokener jt = new JSONTokener(str); + + char[] expectedTokens = str.toCharArray(); + int index = 0; + + while (jt.more()) { + assertThat(jt.next()).isEqualTo(expectedTokens[index++]); + } + } +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java b/json-modules/json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java new file mode 100644 index 000000000000..d1f536d31a17 --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java @@ -0,0 +1,22 @@ +package com.baeldung.jsonjava; + +import org.json.JSONObject; +import org.junit.Test; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; + +public class ObjectToFromJSONIntegrationTest { + + @Test + public void givenDemoBean_thenCreateJSONObject() { + DemoBean demo = new DemoBean(); + demo.setId(1); + demo.setName("lorem ipsum"); + demo.setActive(true); + + JSONObject jo = new JSONObject(demo); + + assertThatJson(jo) + .isEqualTo("{\"name\":\"lorem ipsum\",\"active\":true,\"id\":1}"); + } +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java b/json-modules/json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java new file mode 100644 index 000000000000..fa51c83e046d --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java @@ -0,0 +1,79 @@ +package com.baeldung.jsonobject.iterate; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Map; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Test; + +public class JSONObjectIteratorUnitTest { + + private JSONObjectIterator jsonObjectIterator = new JSONObjectIterator(); + + @Test + public void givenJSONObject_whenIterating_thenGetKeyValuePairs() { + JSONObject jsonObject = getJsonObject(); + + jsonObjectIterator.handleJSONObject(jsonObject); + + Map keyValuePairs = jsonObjectIterator.getKeyValuePairs(); + assertThat(keyValuePairs.get("rType")).isEqualTo("Regular"); + assertThat(keyValuePairs.get("rId")).isEqualTo("1001"); + assertThat(keyValuePairs.get("cType")).isEqualTo("Chocolate"); + assertThat(keyValuePairs.get("cId")).isEqualTo("1002"); + assertThat(keyValuePairs.get("bType")).isEqualTo("BlueBerry"); + assertThat(keyValuePairs.get("bId")).isEqualTo("1003"); + assertThat(keyValuePairs.get("name")).isEqualTo("Cake"); + assertThat(keyValuePairs.get("cakeId")).isEqualTo("0001"); + assertThat(keyValuePairs.get("type")).isEqualTo("donut"); + assertThat(keyValuePairs.get("Type")).isEqualTo("Maple"); + assertThat(keyValuePairs.get("tId")).isEqualTo("5001"); + assertThat(keyValuePairs.get("batters") + .toString()).isEqualTo("[{\"rType\":\"Regular\",\"rId\":\"1001\"},{\"cType\":\"Chocolate\",\"cId\":\"1002\"},{\"bType\":\"BlueBerry\",\"bId\":\"1003\"}]"); + assertThat(keyValuePairs.get("cakeShapes") + .toString()).isEqualTo("[\"square\",\"circle\",\"heart\"]"); + assertThat(keyValuePairs.get("topping") + .toString()).isEqualTo("{\"Type\":\"Maple\",\"tId\":\"5001\"}"); + } + + private JSONObject getJsonObject() { + JSONObject cake = new JSONObject(); + cake.put("cakeId", "0001"); + cake.put("type", "donut"); + cake.put("name", "Cake"); + + JSONArray batters = new JSONArray(); + JSONObject regular = new JSONObject(); + regular.put("rId", "1001"); + regular.put("rType", "Regular"); + batters.put(regular); + JSONObject chocolate = new JSONObject(); + chocolate.put("cId", "1002"); + chocolate.put("cType", "Chocolate"); + batters.put(chocolate); + JSONObject blueberry = new JSONObject(); + blueberry.put("bId", "1003"); + blueberry.put("bType", "BlueBerry"); + batters.put(blueberry); + + JSONArray cakeShapes = new JSONArray(); + cakeShapes.put("square"); + cakeShapes.put("circle"); + cakeShapes.put("heart"); + + cake.put("cakeShapes", cakeShapes); + + cake.put("batters", batters); + + JSONObject topping = new JSONObject(); + topping.put("tId", "5001"); + topping.put("Type", "Maple"); + + cake.put("topping", topping); + + return cake; + } + +} diff --git a/json-modules/json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java b/json-modules/json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java new file mode 100644 index 000000000000..c1553db325ec --- /dev/null +++ b/json-modules/json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java @@ -0,0 +1,59 @@ +package com.baeldung.jsonpointer; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class JsonPointerCrudUnitTest { + + @Test + public void testJsonPointerCrudForAddress() { + + JsonPointerCrud jsonPointerCrud = new JsonPointerCrud(JsonPointerCrudUnitTest.class.getResourceAsStream("/address.json")); + + assertFalse(jsonPointerCrud.check("city")); + + // insert a value + jsonPointerCrud.insert("city", "Rio de Janeiro"); + + assertTrue(jsonPointerCrud.check("city")); + + // fetch full json + String fullJSON = jsonPointerCrud.fetchFullJSON(); + + assertTrue(fullJSON.contains("name")); + + assertTrue(fullJSON.contains("city")); + + // fetch value + String cityName = jsonPointerCrud.fetchValueFromKey("city"); + + assertEquals(cityName, "Rio de Janeiro"); + + // update value + jsonPointerCrud.update("city", "Sao Paulo"); + + // fetch value + cityName = jsonPointerCrud.fetchValueFromKey("city"); + + assertEquals(cityName, "Sao Paulo"); + + // delete + jsonPointerCrud.delete("city"); + + assertFalse(jsonPointerCrud.check("city")); + + } + + @Test + public void testJsonPointerCrudForBooks() { + + JsonPointerCrud jsonPointerCrud = new JsonPointerCrud(JsonPointerCrudUnitTest.class.getResourceAsStream("/books.json")); + + // fetch value + String book = jsonPointerCrud.fetchListValues("books/1"); + + assertEquals(book, "{\"title\":\"Title 2\",\"author\":\"John Doe\"}"); + + } +} \ No newline at end of file diff --git a/json-modules/json/src/test/resources/address.json b/json-modules/json/src/test/resources/address.json new file mode 100644 index 000000000000..599fcae12bb6 --- /dev/null +++ b/json-modules/json/src/test/resources/address.json @@ -0,0 +1,4 @@ +{ + "name": "Customer 01", + "street name": "Street 01" +} \ No newline at end of file diff --git a/json-modules/json/src/test/resources/books.json b/json-modules/json/src/test/resources/books.json new file mode 100644 index 000000000000..0defc3de981b --- /dev/null +++ b/json-modules/json/src/test/resources/books.json @@ -0,0 +1,7 @@ +{ + "library": "My Personal Library", + "books": [ + { "title":"Title 1", "author":"Jane Doe" }, + { "title":"Title 2", "author":"John Doe" } + ] +} \ No newline at end of file diff --git a/json-modules/json/src/test/resources/product_invalid.json b/json-modules/json/src/test/resources/product_invalid.json new file mode 100644 index 000000000000..96d792aca85e --- /dev/null +++ b/json-modules/json/src/test/resources/product_invalid.json @@ -0,0 +1,5 @@ +{ + "id": 1, + "name": "Lampshade", + "price": 0 +} diff --git a/json-modules/json/src/test/resources/product_valid.json b/json-modules/json/src/test/resources/product_valid.json new file mode 100644 index 000000000000..5095029d4ccf --- /dev/null +++ b/json-modules/json/src/test/resources/product_valid.json @@ -0,0 +1,5 @@ +{ + "id": 1, + "name": "Lampshade", + "price": 10 +} diff --git a/json-modules/json/src/test/resources/schema.json b/json-modules/json/src/test/resources/schema.json new file mode 100644 index 000000000000..ce513f82c4cd --- /dev/null +++ b/json-modules/json/src/test/resources/schema.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Product", + "description": "A product from the catalog", + "type": "object", + "properties": { + "id": { + "description": "The unique identifier for a product", + "type": "integer" + }, + "name": { + "description": "Name of the product", + "type": "string" + }, + "price": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + }, + "required": ["id", "name", "price"] +} diff --git a/json-modules/pom.xml b/json-modules/pom.xml index 57f95ddb4a43..66994f1f8673 100644 --- a/json-modules/pom.xml +++ b/json-modules/pom.xml @@ -14,6 +14,9 @@ 1.0.0-SNAPSHOT + + json + diff --git a/pom.xml b/pom.xml index 3200b8ae2f1d..bc60a0397331 100644 --- a/pom.xml +++ b/pom.xml @@ -448,7 +448,6 @@ jooby jsf json-modules - json json-2 json-path jsoup @@ -889,7 +888,6 @@ jooby jsf json-modules - json json-2 json-path jsoup From 96b6a4271c9643f169cc8924e26672315e5b76f6 Mon Sep 17 00:00:00 2001 From: panagiotiskakos Date: Thu, 23 Jun 2022 08:55:10 +0300 Subject: [PATCH 3/7] moved json-2(submodule) to json-modules(parent) --- json-modules/json-2/README.md | 13 + json-modules/json-2/pom.xml | 163 +++ .../com/baeldung/jsoniter/model/Name.java | 22 + .../com/baeldung/jsoniter/model/Student.java | 26 + .../baeldung/jsonoptimization/Customer.java | 123 ++ .../CustomerDeserializer.java | 49 + .../jsonoptimization/CustomerSerializer.java | 34 + .../jsonoptimization/CustomerShortNames.java | 155 +++ .../jsonoptimization/CustomerSlim.java | 73 ++ .../CustomerSlimDeserializer.java | 37 + .../CustomerSlimSerializer.java | 28 + .../CustomerSlimShortNames.java | 81 ++ .../JsonToJavaClassConversion.java | 56 + .../jsontojavaclass/pojo/SamplePojo.java | 213 ++++ .../jsonvalidation/GsonValidator.java | 32 + .../jsonvalidation/JacksonValidator.java | 18 + .../jsonvalidation/JsonValidator.java | 30 + .../jsontojavaclass/pojo/Address.java | 119 ++ .../baeldung/jsontojavaclass/pojo/Input.java | 213 ++++ .../json-2/src/main/resources/input.json | 16 + .../baeldung/fastjson/FastJsonUnitTest.java | 95 ++ .../java/com/baeldung/fastjson/Person.java | 69 ++ .../jsoniter/JsoniterIntroUnitTest.java | 85 ++ .../JacksonDeserializationUnitTest.java | 51 + .../jsonldjava/jackson/Person.java | 67 ++ .../HydraJsonldSerializationUnitTest.java | 63 ++ .../serialization/hydrajsonld/Person.java | 28 + .../JacksonJsonLdSerializationUnitTest.java | 33 + .../serialization/jacksonjsonld/Person.java | 32 + .../JsonOptimizationUnitTest.java | 180 +++ .../JsonToJavaClassConversionUnitTest.java | 38 + .../jsonvalidation/GsonValidatorUnitTest.java | 35 + .../JacksonValidatorUnitTest.java | 29 + .../jsonvalidation/JsonValidatorUnitTest.java | 35 + .../moshi/AlternativeAdapterUnitTest.java | 105 ++ .../com/baeldung/moshi/ArrayUnitTest.java | 36 + .../moshi/ComplexAdapterUnitTest.java | 94 ++ .../com/baeldung/moshi/DefaultUnitTest.java | 68 ++ .../com/baeldung/moshi/PrimitiveUnitTest.java | 77 ++ .../com/baeldung/moshi/RenameUnitTest.java | 68 ++ .../baeldung/moshi/SimpleAdapterUnitTest.java | 129 +++ .../com/baeldung/moshi/TransientUnitTest.java | 66 ++ .../json-2/src/test/resources/Student.json | 1 + .../jsontojavaclass/pojo/SamplePojo.java | 213 ++++ .../json_optimization_mock_data.json | 1000 +++++++++++++++++ .../src/test/resources/sample_input.json | 13 + json-modules/pom.xml | 1 + pom.xml | 2 - 48 files changed, 4212 insertions(+), 2 deletions(-) create mode 100644 json-modules/json-2/README.md create mode 100644 json-modules/json-2/pom.xml create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Name.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Student.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java create mode 100644 json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java create mode 100644 json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java create mode 100644 json-modules/json-2/src/main/resources/input.json create mode 100644 json-modules/json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/fastjson/Person.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java create mode 100644 json-modules/json-2/src/test/resources/Student.json create mode 100644 json-modules/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java create mode 100644 json-modules/json-2/src/test/resources/json_optimization_mock_data.json create mode 100644 json-modules/json-2/src/test/resources/sample_input.json diff --git a/json-modules/json-2/README.md b/json-modules/json-2/README.md new file mode 100644 index 000000000000..b3e7fb0b9479 --- /dev/null +++ b/json-modules/json-2/README.md @@ -0,0 +1,13 @@ +## JSON + +This module contains articles about JSON. + +### Relevant Articles: + +- [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter) +- [Introduction to Moshi Json](https://www.baeldung.com/java-json-moshi) +- [Hypermedia Serialization With JSON-LD](https://www.baeldung.com/json-linked-data) +- [Generate a Java Class From JSON](https://www.baeldung.com/java-generate-class-from-json) +- [A Guide to FastJson](https://www.baeldung.com/fastjson) +- [Check Whether a String is Valid JSON in Java](https://www.baeldung.com/java-validate-json-string) +- More Articles: [[<-- prev]](/json) diff --git a/json-modules/json-2/pom.xml b/json-modules/json-2/pom.xml new file mode 100644 index 000000000000..5a820978a7ca --- /dev/null +++ b/json-modules/json-2/pom.xml @@ -0,0 +1,163 @@ + + + 4.0.0 + com.baeldung + json-2 + 0.0.1-SNAPSHOT + + + com.baeldung + json-modules + 1.0.0-SNAPSHOT + + + + + org.json + json + ${json.version} + + + com.alibaba + fastjson + ${fastjson.version} + + + org.jsonschema2pojo + jsonschema2pojo-core + ${jsonschema2pojo-core.version} + + + com.jsoniter + jsoniter + ${jsoniter.version} + + + com.squareup.moshi + moshi + ${moshi.version} + + + com.squareup.moshi + moshi-adapters + ${moshi.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.io-informatics.oss + jackson-jsonld + ${jackson-jsonld.version} + + + jackson-databind + com.fasterxml.jackson.core + + + jackson-annotations + com.fasterxml.jackson.core + + + jackson-core + com.fasterxml.jackson.core + + + jsonld-java + com.github.jsonld-java + + + + + de.escalon.hypermedia + hydra-jsonld + ${hydra-jsonld.version} + + + jackson-databind + com.fasterxml.jackson.core + + + + + com.github.jsonld-java + jsonld-java + ${jsonld-java.version} + + + jackson-core + com.fasterxml.jackson.core + + + jackson-databind + com.fasterxml.jackson.core + + + + + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.apache.maven.plugins + + + maven-pmd-plugin + + + [3.13.0,) + + + check + + + + + + + + + + + + + + + + 0.9.23 + 1.9.2 + 1.2.21 + 20211205 + 1.1.1 + 0.1.1 + 0.4.2 + 0.13.0 + + + \ No newline at end of file diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Name.java b/json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Name.java new file mode 100644 index 000000000000..ed5e221235fe --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Name.java @@ -0,0 +1,22 @@ +package com.baeldung.jsoniter.model; + +public class Name { + private String firstName; + private String surname; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Student.java b/json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Student.java new file mode 100644 index 000000000000..07c73dd18e2a --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsoniter/model/Student.java @@ -0,0 +1,26 @@ +package com.baeldung.jsoniter.model; + +import com.jsoniter.annotation.JsonProperty; +import com.jsoniter.fuzzy.MaybeStringIntDecoder; + +public class Student { + @JsonProperty(decoder = MaybeStringIntDecoder.class) + private int id; + private Name name; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Name getName() { + return name; + } + + public void setName(Name name) { + this.name = name; + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java new file mode 100644 index 000000000000..85451731e9fe --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java @@ -0,0 +1,123 @@ +package com.baeldung.jsonoptimization; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Objects; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class Customer { + + private long id; + private String firstName; + private String lastName; + private String street; + private String postalCode; + private String city; + private String state; + private String phoneNumber; + private String email; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + 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 String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public int hashCode() { + return Objects.hash(city, email, firstName, id, lastName, phoneNumber, postalCode, state, street); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof Customer)) { + return false; + } + Customer other = (Customer) obj; + return Objects.equals(city, other.city) && Objects.equals(email, other.email) && Objects.equals(firstName, other.firstName) && id == other.id && Objects.equals(lastName, other.lastName) && Objects.equals(phoneNumber, other.phoneNumber) + && Objects.equals(postalCode, other.postalCode) && Objects.equals(state, other.state) && Objects.equals(street, other.street); + } + + @Override + public String toString() { + return "Customer [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", street=" + street + ", postalCode=" + postalCode + ", city=" + city + ", state=" + state + ", phoneNumber=" + phoneNumber + ", email=" + email + "]"; + } + + public static Customer[] fromMockFile() throws IOException { + ObjectMapper objectMapper = new ObjectMapper(); + InputStream jsonFile = new FileInputStream("src/test/resources/json_optimization_mock_data.json"); + Customer[] feedback = objectMapper.readValue(jsonFile, Customer[].class); + return feedback; + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java new file mode 100644 index 000000000000..16b66311ad70 --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java @@ -0,0 +1,49 @@ +package com.baeldung.jsonoptimization; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +public class CustomerDeserializer extends StdDeserializer { + private static final long serialVersionUID = 1L; + + public CustomerDeserializer() { + this(null); + } + + public CustomerDeserializer(Class t) { + super(t); + } + + @Override + public Customer deserialize(JsonParser parser, DeserializationContext deserializer) throws IOException { + Customer feedback = new Customer(); + ObjectCodec codec = parser.getCodec(); + JsonNode node = codec.readTree(parser); + + feedback.setId(node.get(0) + .asLong()); + feedback.setFirstName(node.get(1) + .asText()); + feedback.setLastName(node.get(2) + .asText()); + feedback.setStreet(node.get(3) + .asText()); + feedback.setPostalCode(node.get(4) + .asText()); + feedback.setCity(node.get(5) + .asText()); + feedback.setState(node.get(6) + .asText()); + JsonNode phoneNumber = node.get(7); + feedback.setPhoneNumber(phoneNumber.isNull() ? null : phoneNumber.asText()); + JsonNode email = node.get(8); + feedback.setEmail(email.isNull() ? null : email.asText()); + + return feedback; + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java new file mode 100644 index 000000000000..0f631ee85b88 --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java @@ -0,0 +1,34 @@ +package com.baeldung.jsonoptimization; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class CustomerSerializer extends StdSerializer { + private static final long serialVersionUID = 1L; + + public CustomerSerializer() { + this(null); + } + + public CustomerSerializer(Class t) { + super(t); + } + + @Override + public void serialize(Customer customer, JsonGenerator jsonGenerator, SerializerProvider serializer) throws IOException { + jsonGenerator.writeStartArray(); + jsonGenerator.writeNumber(customer.getId()); + jsonGenerator.writeString(customer.getFirstName()); + jsonGenerator.writeString(customer.getLastName()); + jsonGenerator.writeString(customer.getStreet()); + jsonGenerator.writeString(customer.getPostalCode()); + jsonGenerator.writeString(customer.getCity()); + jsonGenerator.writeString(customer.getState()); + jsonGenerator.writeString(customer.getPhoneNumber()); + jsonGenerator.writeString(customer.getEmail()); + jsonGenerator.writeEndArray(); + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java new file mode 100644 index 000000000000..b94fbb10333b --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java @@ -0,0 +1,155 @@ +package com.baeldung.jsonoptimization; + +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class CustomerShortNames { + + @JsonProperty("i") + private long id; + + @JsonProperty("f") + private String firstName; + + @JsonProperty("l") + private String lastName; + + @JsonProperty("s") + private String street; + + @JsonProperty("p") + private String postalCode; + + @JsonProperty("c") + private String city; + + @JsonProperty("a") + private String state; + + @JsonProperty("o") + private String phoneNumber; + + @JsonProperty("e") + private String email; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + 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 String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public int hashCode() { + return Objects.hash(city, email, firstName, id, lastName, phoneNumber, postalCode, state, street); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof CustomerShortNames)) { + return false; + } + CustomerShortNames other = (CustomerShortNames) obj; + return Objects.equals(city, other.city) && Objects.equals(email, other.email) && Objects.equals(firstName, other.firstName) && id == other.id && Objects.equals(lastName, other.lastName) && Objects.equals(phoneNumber, other.phoneNumber) + && Objects.equals(postalCode, other.postalCode) && Objects.equals(state, other.state) && Objects.equals(street, other.street); + } + + @Override + public String toString() { + return "CustomerWithShorterAttributes [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", street=" + street + ", postalCode=" + postalCode + ", city=" + city + ", state=" + state + ", phoneNumber=" + phoneNumber + ", email=" + email + + "]"; + } + + public static CustomerShortNames[] fromCustomers(Customer[] customers) { + CustomerShortNames[] feedback = new CustomerShortNames[customers.length]; + + for (int i = 0; i < customers.length; i++) { + Customer aCustomer = customers[i]; + CustomerShortNames newOne = new CustomerShortNames(); + + newOne.setId(aCustomer.getId()); + newOne.setFirstName(aCustomer.getFirstName()); + newOne.setLastName(aCustomer.getLastName()); + newOne.setStreet(aCustomer.getStreet()); + newOne.setCity(aCustomer.getCity()); + newOne.setPostalCode(aCustomer.getPostalCode()); + newOne.setState(aCustomer.getState()); + newOne.setPhoneNumber(aCustomer.getPhoneNumber()); + newOne.setEmail(aCustomer.getEmail()); + + feedback[i] = newOne; + } + + return feedback; + } + +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java new file mode 100644 index 000000000000..e2ef4664cfaf --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java @@ -0,0 +1,73 @@ +package com.baeldung.jsonoptimization; + +import java.util.Objects; + +public class CustomerSlim { + private long id; + private String name; + private String address; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + @Override + public int hashCode() { + return Objects.hash(address, id, name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof CustomerSlim)) { + return false; + } + CustomerSlim other = (CustomerSlim) obj; + return Objects.equals(address, other.address) && id == other.id && Objects.equals(name, other.name); + } + + @Override + public String toString() { + return "CustomerSlim [id=" + id + ", name=" + name + ", address=" + address + "]"; + } + + public static CustomerSlim[] fromCustomers(Customer[] customers) { + CustomerSlim[] feedback = new CustomerSlim[customers.length]; + + for (int i = 0; i < customers.length; i++) { + Customer aCustomer = customers[i]; + CustomerSlim newOne = new CustomerSlim(); + + newOne.setId(aCustomer.getId()); + newOne.setName(aCustomer.getFirstName() + " " + aCustomer.getLastName()); + newOne.setAddress(aCustomer.getStreet() + ", " + aCustomer.getCity() + " " + aCustomer.getState() + " " + aCustomer.getPostalCode()); + + feedback[i] = newOne; + } + + return feedback; + } + +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java new file mode 100644 index 000000000000..296ee6fdf6cf --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java @@ -0,0 +1,37 @@ +package com.baeldung.jsonoptimization; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +public class CustomerSlimDeserializer extends StdDeserializer { + private static final long serialVersionUID = 1L; + + public CustomerSlimDeserializer() { + this(null); + } + + public CustomerSlimDeserializer(Class t) { + super(t); + } + + @Override + public CustomerSlim deserialize(JsonParser parser, DeserializationContext deserializer) throws IOException { + CustomerSlim feedback = new CustomerSlim(); + ObjectCodec codec = parser.getCodec(); + JsonNode node = codec.readTree(parser); + + feedback.setId(node.get(0) + .asLong()); + feedback.setName(node.get(1) + .asText()); + feedback.setAddress(node.get(2) + .asText()); + + return feedback; + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java new file mode 100644 index 000000000000..520c541da6d8 --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java @@ -0,0 +1,28 @@ +package com.baeldung.jsonoptimization; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class CustomerSlimSerializer extends StdSerializer { + private static final long serialVersionUID = 1L; + + public CustomerSlimSerializer() { + this(null); + } + + public CustomerSlimSerializer(Class t) { + super(t); + } + + @Override + public void serialize(CustomerSlim customer, JsonGenerator jsonGenerator, SerializerProvider serializer) throws IOException { + jsonGenerator.writeStartArray(); + jsonGenerator.writeNumber(customer.getId()); + jsonGenerator.writeString(customer.getName()); + jsonGenerator.writeString(customer.getAddress()); + jsonGenerator.writeEndArray(); + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java new file mode 100644 index 000000000000..bf00e847acfb --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java @@ -0,0 +1,81 @@ +package com.baeldung.jsonoptimization; + +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class CustomerSlimShortNames { + + @JsonProperty("i") + private long id; + + @JsonProperty("n") + private String name; + + @JsonProperty("a") + private String address; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + @Override + public int hashCode() { + return Objects.hash(address, id, name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof CustomerSlimShortNames)) { + return false; + } + CustomerSlimShortNames other = (CustomerSlimShortNames) obj; + return Objects.equals(address, other.address) && id == other.id && Objects.equals(name, other.name); + } + + @Override + public String toString() { + return "CustomerSlim [id=" + id + ", name=" + name + ", address=" + address + "]"; + } + + public static CustomerSlimShortNames[] fromCustomers(Customer[] customers) { + CustomerSlimShortNames[] feedback = new CustomerSlimShortNames[customers.length]; + + for (int i = 0; i < customers.length; i++) { + Customer aCustomer = customers[i]; + CustomerSlimShortNames newOne = new CustomerSlimShortNames(); + + newOne.setId(aCustomer.getId()); + newOne.setName(aCustomer.getFirstName() + " " + aCustomer.getLastName()); + newOne.setAddress(aCustomer.getStreet() + ", " + aCustomer.getCity() + " " + aCustomer.getState() + " " + aCustomer.getPostalCode()); + + feedback[i] = newOne; + } + + return feedback; + } + +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java b/json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java new file mode 100644 index 000000000000..1b18463856de --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java @@ -0,0 +1,56 @@ +package com.baeldung.jsontojavaclass; + +import java.io.File; +import java.io.IOException; +import java.net.URL; + +import org.jsonschema2pojo.DefaultGenerationConfig; +import org.jsonschema2pojo.GenerationConfig; +import org.jsonschema2pojo.Jackson2Annotator; +import org.jsonschema2pojo.SchemaGenerator; +import org.jsonschema2pojo.SchemaMapper; +import org.jsonschema2pojo.SchemaStore; +import org.jsonschema2pojo.SourceType; +import org.jsonschema2pojo.rules.RuleFactory; + +import com.sun.codemodel.JCodeModel; + +public class JsonToJavaClassConversion { + + public static void main(String[] args) { + String packageName = "com.baeldung.jsontojavaclass.pojo"; + String basePath = "src/main/resources"; + File inputJson = new File(basePath + File.separator + "input.json"); + File outputPojoDirectory = new File(basePath + File.separator + "convertedPojo"); + outputPojoDirectory.mkdirs(); + try { + new JsonToJavaClassConversion().convertJsonToJavaClass(inputJson.toURI().toURL(), outputPojoDirectory, packageName, inputJson.getName().replace(".json", "")); + } catch (IOException e) { + System.out.println("Encountered issue while converting to pojo: " + e.getMessage()); + e.printStackTrace(); + } + } + + + public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName) throws IOException { + JCodeModel jcodeModel = new JCodeModel(); + + GenerationConfig config = new DefaultGenerationConfig() { + @Override + public boolean isGenerateBuilders() { + return true; + } + + @Override + public SourceType getSourceType() { + return SourceType.JSON; + } + }; + + SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator()); + mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl); + + jcodeModel.build(outputJavaClassDirectory); + } + +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java new file mode 100644 index 000000000000..38ebb8a0f8aa --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java @@ -0,0 +1,213 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "salary", + "topics" +}) +@Generated("jsonschema2pojo") +public class SamplePojo { + + @JsonProperty("name") + private String name; + @JsonProperty("area") + private String area; + @JsonProperty("author") + private String author; + @JsonProperty("id") + private Integer id; + @JsonProperty("salary") + private Integer salary; + @JsonProperty("topics") + private List topics = new ArrayList(); + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + public SamplePojo withName(String name) { + this.name = name; + return this; + } + + @JsonProperty("area") + public String getArea() { + return area; + } + + @JsonProperty("area") + public void setArea(String area) { + this.area = area; + } + + public SamplePojo withArea(String area) { + this.area = area; + return this; + } + + @JsonProperty("author") + public String getAuthor() { + return author; + } + + @JsonProperty("author") + public void setAuthor(String author) { + this.author = author; + } + + public SamplePojo withAuthor(String author) { + this.author = author; + return this; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + public SamplePojo withId(Integer id) { + this.id = id; + return this; + } + + @JsonProperty("salary") + public Integer getSalary() { + return salary; + } + + @JsonProperty("salary") + public void setSalary(Integer salary) { + this.salary = salary; + } + + public SamplePojo withSalary(Integer salary) { + this.salary = salary; + return this; + } + + @JsonProperty("topics") + public List getTopics() { + return topics; + } + + @JsonProperty("topics") + public void setTopics(List topics) { + this.topics = topics; + } + + public SamplePojo withTopics(List topics) { + this.topics = topics; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public SamplePojo withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("name"); + sb.append('='); + sb.append(((this.name == null)?"":this.name)); + sb.append(','); + sb.append("area"); + sb.append('='); + sb.append(((this.area == null)?"":this.area)); + sb.append(','); + sb.append("author"); + sb.append('='); + sb.append(((this.author == null)?"":this.author)); + sb.append(','); + sb.append("id"); + sb.append('='); + sb.append(((this.id == null)?"":this.id)); + sb.append(','); + sb.append("salary"); + sb.append('='); + sb.append(((this.salary == null)?"":this.salary)); + sb.append(','); + sb.append("topics"); + sb.append('='); + sb.append(((this.topics == null)?"":this.topics)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof SamplePojo) == false) { + return false; + } + SamplePojo rhs = ((SamplePojo) other); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); + } + +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java b/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java new file mode 100644 index 000000000000..841513fc2822 --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java @@ -0,0 +1,32 @@ +package com.baeldung.jsonvalidation; + +import java.io.IOException; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; + +public class GsonValidator { + + final TypeAdapter strictAdapter = new Gson().getAdapter(JsonElement.class); + + public boolean isValid(String json) { + try { + JsonParser.parseString(json); + } catch (JsonSyntaxException e) { + return false; + } + return true; + } + + public boolean isValidStrict(String json) { + try { + strictAdapter.fromJson(json); + } catch (JsonSyntaxException | IOException e) { + return false; + } + return true; + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java b/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java new file mode 100644 index 000000000000..8c339f46c815 --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java @@ -0,0 +1,18 @@ +package com.baeldung.jsonvalidation; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class JacksonValidator { + + final ObjectMapper mapper = new ObjectMapper(); + + public boolean isValid(String json) { + try { + mapper.readTree(json); + } catch (JacksonException e) { + return false; + } + return true; + } +} diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java b/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java new file mode 100644 index 000000000000..e4183e23224c --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java @@ -0,0 +1,30 @@ +package com.baeldung.jsonvalidation; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class JsonValidator { + + public boolean isValidObject(String json) { + try { + new JSONObject(json); + } catch (JSONException e) { + return false; + } + return true; + } + + public boolean isValidJson(String json) { + try { + new JSONObject(json); + } catch (JSONException e) { + try { + new JSONArray(json); + } catch (JSONException ne) { + return false; + } + } + return true; + } +} diff --git a/json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java b/json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java new file mode 100644 index 000000000000..e3d901edf422 --- /dev/null +++ b/json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java @@ -0,0 +1,119 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "city", + "country" +}) +@Generated("jsonschema2pojo") +public class Address { + + @JsonProperty("city") + private String city; + @JsonProperty("country") + private String country; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("city") + public String getCity() { + return city; + } + + @JsonProperty("city") + public void setCity(String city) { + this.city = city; + } + + public Address withCity(String city) { + this.city = city; + return this; + } + + @JsonProperty("country") + public String getCountry() { + return country; + } + + @JsonProperty("country") + public void setCountry(String country) { + this.country = country; + } + + public Address withCountry(String country) { + this.country = country; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Address withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Address.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("city"); + sb.append('='); + sb.append(((this.city == null)?"":this.city)); + sb.append(','); + sb.append("country"); + sb.append('='); + sb.append(((this.country == null)?"":this.country)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.country == null)? 0 :this.country.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.city == null)? 0 :this.city.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Address) == false) { + return false; + } + Address rhs = ((Address) other); + return ((((this.country == rhs.country)||((this.country!= null)&&this.country.equals(rhs.country)))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.city == rhs.city)||((this.city!= null)&&this.city.equals(rhs.city)))); + } + +} diff --git a/json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java b/json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java new file mode 100644 index 000000000000..19bee8db4d95 --- /dev/null +++ b/json-modules/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java @@ -0,0 +1,213 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "topics", + "address" +}) +@Generated("jsonschema2pojo") +public class Input { + + @JsonProperty("name") + private String name; + @JsonProperty("area") + private String area; + @JsonProperty("author") + private String author; + @JsonProperty("id") + private Integer id; + @JsonProperty("topics") + private List topics = new ArrayList(); + @JsonProperty("address") + private Address address; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + public Input withName(String name) { + this.name = name; + return this; + } + + @JsonProperty("area") + public String getArea() { + return area; + } + + @JsonProperty("area") + public void setArea(String area) { + this.area = area; + } + + public Input withArea(String area) { + this.area = area; + return this; + } + + @JsonProperty("author") + public String getAuthor() { + return author; + } + + @JsonProperty("author") + public void setAuthor(String author) { + this.author = author; + } + + public Input withAuthor(String author) { + this.author = author; + return this; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + public Input withId(Integer id) { + this.id = id; + return this; + } + + @JsonProperty("topics") + public List getTopics() { + return topics; + } + + @JsonProperty("topics") + public void setTopics(List topics) { + this.topics = topics; + } + + public Input withTopics(List topics) { + this.topics = topics; + return this; + } + + @JsonProperty("address") + public Address getAddress() { + return address; + } + + @JsonProperty("address") + public void setAddress(Address address) { + this.address = address; + } + + public Input withAddress(Address address) { + this.address = address; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Input withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Input.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("name"); + sb.append('='); + sb.append(((this.name == null)?"":this.name)); + sb.append(','); + sb.append("area"); + sb.append('='); + sb.append(((this.area == null)?"":this.area)); + sb.append(','); + sb.append("author"); + sb.append('='); + sb.append(((this.author == null)?"":this.author)); + sb.append(','); + sb.append("id"); + sb.append('='); + sb.append(((this.id == null)?"":this.id)); + sb.append(','); + sb.append("topics"); + sb.append('='); + sb.append(((this.topics == null)?"":this.topics)); + sb.append(','); + sb.append("address"); + sb.append('='); + sb.append(((this.address == null)?"":this.address)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Input) == false) { + return false; + } + Input rhs = ((Input) other); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address))))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties)))); + } + +} diff --git a/json-modules/json-2/src/main/resources/input.json b/json-modules/json-2/src/main/resources/input.json new file mode 100644 index 000000000000..22706ede5348 --- /dev/null +++ b/json-modules/json-2/src/main/resources/input.json @@ -0,0 +1,16 @@ +{ + "name": "Baeldung", + "area": "tech blogs", + "author": "Eugen", + "id": 32134, + "topics": [ + "java", + "kotlin", + "cs", + "linux" + ], + "address": { + "city": "Bucharest", + "country": "Romania" + } +} \ No newline at end of file diff --git a/json-modules/json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java new file mode 100644 index 000000000000..eec7a1c95fb0 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java @@ -0,0 +1,95 @@ +package com.baeldung.fastjson; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.BeanContext; +import com.alibaba.fastjson.serializer.ContextValueFilter; +import com.alibaba.fastjson.serializer.NameFilter; +import com.alibaba.fastjson.serializer.SerializeConfig; +import org.junit.Before; +import org.junit.Test; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class FastJsonUnitTest { + private List listOfPersons; + + @Before + public void setUp() { + listOfPersons = new ArrayList(); + Calendar calendar = Calendar.getInstance(); + calendar.set(2016, 6, 24); + listOfPersons.add(new Person(15, "John", "Doe", calendar.getTime())); + listOfPersons.add(new Person(20, "Janette", "Doe", calendar.getTime())); + } + + @Test + public void whenJavaList_thanConvertToJsonCorrect() { + String personJsonFormat = JSON.toJSONString(listOfPersons); + assertEquals(personJsonFormat, "[{\"FIRST NAME\":\"Doe\",\"LAST NAME\":\"John\",\"DATE OF BIRTH\":" + "\"24/07/2016\"},{\"FIRST NAME\":\"Doe\",\"LAST NAME\":\"Janette\",\"DATE OF BIRTH\":" + "\"24/07/2016\"}]"); + } + + @Test + public void whenJson_thanConvertToObjectCorrect() { + String personJsonFormat = JSON.toJSONString(listOfPersons.get(0)); + Person newPerson = JSON.parseObject(personJsonFormat, Person.class); + assertEquals(newPerson.getAge(), 0); // serialize is set to false for age attribute + assertEquals(newPerson.getFirstName(), listOfPersons.get(0) + .getFirstName()); + assertEquals(newPerson.getLastName(), listOfPersons.get(0) + .getLastName()); + } + + @Test + public void whenGenerateJson_thanGenerationCorrect() throws ParseException { + JSONArray jsonArray = new JSONArray(); + for (int i = 0; i < 2; i++) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("FIRST NAME", "John" + i); + jsonObject.put("LAST NAME", "Doe" + i); + jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12"); + jsonArray.add(jsonObject); + } + assertEquals(jsonArray.toString(), "[{\"LAST NAME\":\"Doe0\",\"DATE OF BIRTH\":" + "\"2016/12/12 12:12:12\",\"FIRST NAME\":\"John0\"},{\"LAST NAME\":\"Doe1\"," + "\"DATE OF BIRTH\":\"2016/12/12 12:12:12\",\"FIRST NAME\":\"John1\"}]"); + } + + @Test + public void givenContextFilter_whenJavaObject_thanJsonCorrect() { + ContextValueFilter valueFilter = new ContextValueFilter() { + public Object process(BeanContext context, Object object, String name, Object value) { + if (name.equals("DATE OF BIRTH")) { + return "NOT TO DISCLOSE"; + } + if (value.equals("John") || value.equals("Doe")) { + return ((String) value).toUpperCase(); + } else { + return null; + } + } + }; + JSON.toJSONString(listOfPersons, valueFilter); + } + + @Test + public void givenSerializeConfig_whenJavaObject_thanJsonCorrect() { + NameFilter formatName = new NameFilter() { + public String process(Object object, String name, Object value) { + return name.toLowerCase() + .replace(" ", "_"); + } + }; + SerializeConfig.getGlobalInstance() + .addFilter(Person.class, formatName); + String jsonOutput = JSON.toJSONStringWithDateFormat(listOfPersons, "yyyy-MM-dd"); + assertEquals(jsonOutput, "[{\"first_name\":\"Doe\",\"last_name\":\"John\"," + "\"date_of_birth\":\"2016-07-24\"},{\"first_name\":\"Doe\",\"last_name\":" + "\"Janette\",\"date_of_birth\":\"2016-07-24\"}]"); + // resetting custom serializer + SerializeConfig.getGlobalInstance() + .put(Person.class, null); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/fastjson/Person.java b/json-modules/json-2/src/test/java/com/baeldung/fastjson/Person.java new file mode 100644 index 000000000000..5e142131a370 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/fastjson/Person.java @@ -0,0 +1,69 @@ +package com.baeldung.fastjson; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.util.Date; + +public class Person { + + @JSONField(name = "AGE", serialize = false, deserialize = false) + private int age; + + @JSONField(name = "LAST NAME", ordinal = 2) + private String lastName; + + @JSONField(name = "FIRST NAME", ordinal = 1) + private String firstName; + + @JSONField(name = "DATE OF BIRTH", format = "dd/MM/yyyy", ordinal = 3) + private Date dateOfBirth; + + public Person() { + + } + + public Person(int age, String lastName, String firstName, Date dateOfBirth) { + super(); + this.age = age; + this.lastName = lastName; + this.firstName = firstName; + this.dateOfBirth = dateOfBirth; + } + + @Override + public String toString() { + return "Person [age=" + age + ", lastName=" + lastName + ", firstName=" + firstName + ", dateOfBirth=" + dateOfBirth + "]"; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java new file mode 100644 index 000000000000..09f82567a258 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java @@ -0,0 +1,85 @@ +package com.baeldung.jsoniter; + +import com.baeldung.jsoniter.model.Name; +import com.baeldung.jsoniter.model.Student; +import com.jsoniter.JsonIterator; +import com.jsoniter.ValueType; +import com.jsoniter.any.Any; + +import org.junit.Test; + +import static com.jsoniter.ValueType.STRING; +import static org.assertj.core.api.Assertions.assertThat; + +public class JsoniterIntroUnitTest { + + @Test + public void whenParsedUsingBindAPI_thenConvertedToJavaObjectCorrectly() { + String input = "{\"id\":1,\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; + + Student student = JsonIterator.deserialize(input, Student.class); + + assertThat(student.getId()).isEqualTo(1); + assertThat(student.getName().getFirstName()).isEqualTo("Joe"); + assertThat(student.getName().getSurname()).isEqualTo("Blogg"); + } + + @Test + public void givenTypeInJsonFuzzy_whenFieldIsMaybeDecoded_thenFieldParsedCorrectly() { + String input = "{\"id\":\"1\",\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; + + Student student = JsonIterator.deserialize(input, Student.class); + + assertThat(student.getId()).isEqualTo(1); + } + + @Test + public void whenParsedUsingAnyAPI_thenFieldValueCanBeExtractedUsingTheFieldName() { + String input = "{\"id\":1,\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; + + Any any = JsonIterator.deserialize(input); + + assertThat(any.toInt("id")).isEqualTo(1); + assertThat(any.toString("name", "firstName")).isEqualTo("Joe"); + assertThat(any.toString("name", "surname")).isEqualTo("Blogg"); + } + + @Test + public void whenParsedUsingAnyAPI_thenFieldValueTypeIsCorrect() { + String input = "{\"id\":1,\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; + + Any any = JsonIterator.deserialize(input); + + assertThat(any.get("id").valueType()).isEqualTo(ValueType.NUMBER); + assertThat(any.get("name").valueType()).isEqualTo(ValueType.OBJECT); + assertThat(any.get("error").valueType()).isEqualTo(ValueType.INVALID); + } + + @Test + public void whenParsedUsingIteratorAPI_thenFieldValuesExtractedCorrectly() throws Exception { + Name name = new Name(); + String input = "{ \"firstName\" : \"Joe\", \"surname\" : \"Blogg\" }"; + JsonIterator iterator = JsonIterator.parse(input); + + for (String field = iterator.readObject(); field != null; field = iterator.readObject()) { + switch (field) { + case "firstName": + if (iterator.whatIsNext() == ValueType.STRING) { + name.setFirstName(iterator.readString()); + } + continue; + case "surname": + if (iterator.whatIsNext() == ValueType.STRING) { + name.setSurname(iterator.readString()); + } + continue; + default: + iterator.skip(); + } + } + + assertThat(name.getFirstName()).isEqualTo("Joe"); + assertThat(name.getSurname()).isEqualTo("Blogg"); + } + +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java new file mode 100644 index 000000000000..24968f384748 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java @@ -0,0 +1,51 @@ +package com.baeldung.jsonld.deserialization.jsonldjava.jackson; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.HashMap; + +import org.junit.jupiter.api.Test; + +import com.baeldung.jsonld.deserialization.jsonldjava.jackson.Person.Link; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.jsonldjava.core.JsonLdOptions; +import com.github.jsonldjava.core.JsonLdProcessor; +import com.github.jsonldjava.utils.JsonUtils; + +public class JacksonDeserializationUnitTest { + + @Test + void givenAJsonLdObject_whenCompactIsUsedWithEmptyContext_thenItCanBeDeserializedWithJackson() throws IOException { + String inputJsonLd = "{" + + "\"@context\":{" + + "\"@vocab\":\"http://schema.org/\"," + + "\"knows\":{\"@type\":\"@id\"}" + + "}," + + "\"@type\":\"Person\"," + + "\"@id\":\"http://example.com/person/1234\"," + + "\"name\":\"Example Name\"," + + "\"knows\":\"http://example.com/person/2345\"" + + "}"; + + Object jsonObject = JsonUtils.fromString(inputJsonLd); + Object compact = JsonLdProcessor.compact(jsonObject, new HashMap<>(), new JsonLdOptions()); + String compactContent = JsonUtils.toString(compact); + + assertEquals("{" + + "\"@id\":\"http://example.com/person/1234\"," + + "\"@type\":\"http://schema.org/Person\"," + + "\"http://schema.org/knows\":{\"@id\":\"http://example.com/person/2345\"}," + + "\"http://schema.org/name\":\"Example Name\"" + + "}", compactContent); + + ObjectMapper objectMapper = new ObjectMapper(); + Person person = objectMapper.readValue(compactContent, Person.class); + + Person expectedPerson = new Person("http://example.com/person/1234", "Example Name", new Link("http://example.com/person/2345")); + + assertEquals(expectedPerson.getId(), person.getId()); + assertEquals(expectedPerson.getName(), person.getName()); + assertEquals(expectedPerson.getKnows().getId(), person.getKnows().getId()); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java b/json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java new file mode 100644 index 000000000000..fefa6768175a --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java @@ -0,0 +1,67 @@ +package com.baeldung.jsonld.deserialization.jsonldjava.jackson; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class Person { + @JsonProperty("@id") + private String id; + @JsonProperty("http://schema.org/name") + private String name; + @JsonProperty("http://schema.org/knows") + private Link knows; + + public Person() { + } + + public Person(String id, String name, Link knows) { + this.id = id; + this.name = name; + this.knows = knows; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Link getKnows() { + return knows; + } + + public void setKnows(Link knows) { + this.knows = knows; + } + + public static class Link { + @JsonProperty("@id") + private String id; + + public Link() { + } + + public Link(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java new file mode 100644 index 000000000000..33395cc4386d --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java @@ -0,0 +1,63 @@ +package com.baeldung.jsonld.serialization.hydrajsonld; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.BeanDescription; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; +import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase; + +import de.escalon.hypermedia.hydra.serialize.JacksonHydraSerializer; + +public class HydraJsonldSerializationUnitTest { + @Test + void givenAHydraJsonldAnnotatedObject_whenJacksonHydraSerializerIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(getJacksonHydraSerializerModule()); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + Person person = new Person("http://example.com/person/1234", "Example Name"); + + String personJsonLd = objectMapper.writeValueAsString(person); + + assertEquals("{" + + "\"@context\":{" + + "\"@vocab\":\"http://example.com/vocab/\"," + + "\"name\":\"fullName\"" + + "}," + + "\"@type\":\"person\"," + + "\"name\":\"Example Name\"," + + "\"@id\":\"http://example.com/person/1234\"" + + "}", personJsonLd); + } + + static SimpleModule getJacksonHydraSerializerModule() { + return new SimpleModule() { + + @Override + public void setupModule(SetupContext context) { + super.setupModule(context); + + context.addBeanSerializerModifier(new BeanSerializerModifier() { + + @Override + public JsonSerializer modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer serializer) { + + if (serializer instanceof BeanSerializerBase) { + return new JacksonHydraSerializer((BeanSerializerBase) serializer); + } else { + return serializer; + } + } + }); + } + }; + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java new file mode 100644 index 000000000000..3d8573c96584 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java @@ -0,0 +1,28 @@ +package com.baeldung.jsonld.serialization.hydrajsonld; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import de.escalon.hypermedia.hydra.mapping.Expose; +import de.escalon.hypermedia.hydra.mapping.Vocab; + +@Vocab("http://example.com/vocab/") +@Expose("person") +public class Person { + private String id; + private String name; + + public Person(String id, String name) { + this.id = id; + this.name = name; + } + + @JsonProperty("@id") + public String getId() { + return id; + } + + @Expose("fullName") + public String getName() { + return name; + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java new file mode 100644 index 000000000000..9679426acb09 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.jsonld.serialization.jacksonjsonld; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import ioinformarics.oss.jackson.module.jsonld.JsonldModule; + +public class JacksonJsonLdSerializationUnitTest { + @Test + void givenAJacksonJsonldAnnotatedObject_whenJsonldModuleIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JsonldModule()); + + Person person = new Person("http://example.com/person/1234", "Example Name"); + String personJsonLd = objectMapper.writeValueAsString(person); + + assertEquals("{" + + "\"@type\":\"s:Person\"," + + "\"@context\":{" + + "\"s\":\"http://schema.org/\"," + + "\"name\":\"s:name\"," + + "\"knows\":{\"@id\":\"s:knows\",\"@type\":\"@id\"}" + + "}," + + "\"name\":\"Example Name\"," + + "\"@id\":\"http://example.com/person/1234\"," + + "\"knows\":\"http://example.com/person/2345\"" + + "}", personJsonLd); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java new file mode 100644 index 000000000000..b63f49840cca --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java @@ -0,0 +1,32 @@ +package com.baeldung.jsonld.serialization.jacksonjsonld; + +import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId; +import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink; +import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace; +import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty; +import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldResource; +import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType; + +@JsonldResource +@JsonldNamespace(name = "s", uri = "http://schema.org/") +@JsonldType("s:Person") +@JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345") +public class Person { + @JsonldId + private String id; + @JsonldProperty("s:name") + private String name; + + public Person(String id, String name) { + this.id = id; + this.name = name; + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java new file mode 100644 index 000000000000..7a56a68fe2ea --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java @@ -0,0 +1,180 @@ +package com.baeldung.jsonoptimization; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.DecimalFormat; +import java.util.zip.GZIPOutputStream; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.module.SimpleModule; + +class JsonOptimizationUnitTest { + private static final String TEST_LABEL_JACKSON_DEFAULT_OPTIONS = "Default JSON"; + private static final String TEST_LABEL_DEFAULT_JSON_NO_NULL = "Default JSON without null"; + private static final String TEST_LABEL_SHORTER_FIELD_NAMES = "Shorter field names"; + private static final String TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL = "Shorter field names without null"; + private static final String TEST_LABEL_SERIALIZING_TO_ARRAY = "Custom serializer"; + private static final String TEST_LABEL_SLIM_CUSTOM_SERIALIZER = "Slim custom serializer"; + private static final String TEST_LABEL_SLIM_CUSTOMER = "Slim customer"; + private static final String TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES = "Slim customer with shorter field names"; + private static DecimalFormat LENGTH_FORMATTER = new DecimalFormat("###,###.0"); + private static DecimalFormat PERCENT_FORMATTER = new DecimalFormat("###.0"); + private static Customer[] customers; + private ObjectMapper mapper; + private static int defaultJsonLength; + + @BeforeAll + static void setUpOnce() throws Exception { + customers = Customer.fromMockFile(); + ObjectMapper oneTimeMapper = new ObjectMapper(); + byte[] feedback = oneTimeMapper.writeValueAsBytes(customers); + defaultJsonLength = feedback.length; + System.out.println(); + System.out.println("Default JSON length: " + defaultJsonLength); + System.out.println(); + } + + @BeforeEach + void setUp() { + mapper = new ObjectMapper(); + } + + @Test + void whenSetUp_ThenOneThousandCustomers() { + assertEquals(1000, customers.length, "There should be a 1000 customers"); + } + + @Test + void whenJacksonDefaultOptions_thenValid() throws IOException { + printBanner(TEST_LABEL_JACKSON_DEFAULT_OPTIONS); + byte[] plainJson = createJsonAndVerify(TEST_LABEL_JACKSON_DEFAULT_OPTIONS, customers); + compressJson(TEST_LABEL_JACKSON_DEFAULT_OPTIONS, plainJson); + } + + @Test + void whenExcludingNull_thenValid() throws IOException { + printBanner(TEST_LABEL_DEFAULT_JSON_NO_NULL); + mapper.setSerializationInclusion(Include.NON_NULL); + byte[] plainJson = createJsonAndVerify(TEST_LABEL_DEFAULT_JSON_NO_NULL, customers); + compressJson(TEST_LABEL_DEFAULT_JSON_NO_NULL, plainJson); + } + + @Test + void whenShorterFieldNames_thenValid() throws IOException { + printBanner(TEST_LABEL_SHORTER_FIELD_NAMES); + CustomerShortNames[] shorterOnes = CustomerShortNames.fromCustomers(customers); + byte[] shorterJson = createJsonAndVerify(TEST_LABEL_SHORTER_FIELD_NAMES, shorterOnes); + compressJson(TEST_LABEL_SHORTER_FIELD_NAMES, shorterJson); + } + + @Test + void whenShorterFieldNamesAndExcludingNull_thenValid() throws IOException { + printBanner(TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL); + CustomerShortNames[] shorterOnes = CustomerShortNames.fromCustomers(customers); + mapper.setSerializationInclusion(Include.NON_NULL); + byte[] shorterJson = createJsonAndVerify(TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL, shorterOnes); + compressJson(TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL, shorterJson); + } + + @Test + void whenSlimCustomer_thenValid() throws IOException { + printBanner(TEST_LABEL_SLIM_CUSTOMER); + CustomerSlim[] slimOnes = CustomerSlim.fromCustomers(customers); + byte[] slimJson = createJsonAndVerify(TEST_LABEL_SLIM_CUSTOMER, slimOnes); + compressJson(TEST_LABEL_SLIM_CUSTOMER, slimJson); + } + + @Test + void whenSlimCustomerAndShorterFieldNames_thenValid() throws IOException { + printBanner(TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES); + CustomerSlimShortNames[] slimOnes = CustomerSlimShortNames.fromCustomers(customers); + byte[] slimJson = createJsonAndVerify(TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES, slimOnes); + compressJson(TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES, slimJson); + } + + @Test + void whenSerializingToArray_thenValid() throws IOException { + printBanner(TEST_LABEL_SERIALIZING_TO_ARRAY); + SimpleModule serializer = new SimpleModule("CustomDeSerializer", new Version(1, 0, 0, null, null, null)); + serializer.addSerializer(Customer.class, new CustomerSerializer()); + serializer.addDeserializer(Customer.class, new CustomerDeserializer()); + mapper.registerModule(serializer); + + byte[] plainJson = createJsonAndVerify(TEST_LABEL_SERIALIZING_TO_ARRAY, customers); + compressJson(TEST_LABEL_SERIALIZING_TO_ARRAY, plainJson); + } + + @Test + void whenSerializingToArrayAndSlimCustomer_thenValid() throws IOException { + printBanner(TEST_LABEL_SLIM_CUSTOM_SERIALIZER); + SimpleModule serializer = new SimpleModule("SlimCustomDeSerializer", new Version(1, 0, 0, null, null, null)); + serializer.addSerializer(CustomerSlim.class, new CustomerSlimSerializer()); + serializer.addDeserializer(CustomerSlim.class, new CustomerSlimDeserializer()); + mapper.registerModule(serializer); + + CustomerSlim[] slimOnes = CustomerSlim.fromCustomers(customers); + byte[] plainJson = createJsonAndVerify(TEST_LABEL_SLIM_CUSTOM_SERIALIZER, slimOnes); + compressJson(TEST_LABEL_SLIM_CUSTOM_SERIALIZER, plainJson); + } + + private void printBanner(String name) { + System.out.println(); + System.out.println("************************************************"); + System.out.println("Testing " + name); + System.out.println(); + } + + void compressJson(String label, byte[] plainJson) throws IOException { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + GZIPOutputStream gzipStream = new GZIPOutputStream(outputStream); + gzipStream.write(plainJson); + gzipStream.close(); + outputStream.close(); + byte[] gzippedJson = outputStream.toByteArray(); + double length = gzippedJson.length / 1024d; + double percent = gzippedJson.length * 100d / defaultJsonLength; + System.out.println(label + " GZIPped length: " + LENGTH_FORMATTER.format(length) + + "kB (" + PERCENT_FORMATTER.format(percent) + "%)"); + assertTrue(plainJson.length > gzippedJson.length, label + " should be longer than GZIPped data"); + } + + private byte[] createJsonAndVerify(String label, Object[] customers) throws IOException { + System.out.println(label + " sample: "); + ObjectWriter prettyWritter = mapper.writerWithDefaultPrettyPrinter(); + System.out.println(prettyWritter.writeValueAsString(customers[0])); + + byte[] feedback = mapper.writeValueAsBytes(customers); + double length = feedback.length / 1024d; + double percent = feedback.length * 100d / defaultJsonLength; + System.out.println(label + " length: " + LENGTH_FORMATTER.format(length) + + "kB (" + PERCENT_FORMATTER.format(percent) + "%)"); + assertTrue(feedback.length > 1, label + " should be there"); + + String prefix = label.replaceAll(" ", "-") + .toLowerCase(); + File tempFile = File.createTempFile("jon-optimization-" + prefix, ".json"); + FileOutputStream fos = new FileOutputStream(tempFile); + fos.write(feedback); + fos.close(); + System.out.println(label + " file: " + tempFile.toString()); + + Object[] restoredOnes = mapper.readValue(feedback, customers.getClass()); + assertArrayEquals(TEST_LABEL_JACKSON_DEFAULT_OPTIONS + ": restoring from JSON should work", customers, restoredOnes); + + return feedback; + } + +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java new file mode 100644 index 000000000000..f8000fa6fbf6 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java @@ -0,0 +1,38 @@ +package com.baeldung.jsontojavaclass; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Arrays; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class JsonToJavaClassConversionUnitTest { + + private JsonToJavaClassConversion jsonToJavaConversion = new JsonToJavaClassConversion(); + + @Test + void whenProvideInputJSON_thenGenerateJavaClass() throws MalformedURLException, IOException { + + String packageName = "com.baeldung.jsontojavaclass.pojo"; + + // load input JSON file + String jsonPath = "src/test/resources/"; + File inputJson = new File(jsonPath + "sample_input.json"); + + // create the local directory for generating the Java Class file + String outputPath = "src/test/resources/"; + File outputJavaClassDirectory = new File(outputPath); + + String javaClassName = "SamplePojo"; + + jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI() + .toURL(), outputJavaClassDirectory, packageName, javaClassName); + + File outputJavaClassPath = new File(outputPath + packageName.replace(".", "/")); + Assertions.assertTrue(Arrays.stream(outputJavaClassPath.listFiles()).peek(System.out::println).anyMatch(file -> (javaClassName+".java").equalsIgnoreCase(file.getName()))); + + } + +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java new file mode 100644 index 000000000000..3b8989bdb522 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.jsonvalidation; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class GsonValidatorUnitTest { + + private final GsonValidator validator = new GsonValidator(); + + @Test + public void givenValidObjectJson_whenValidatingNonStrict_thenValid() { + String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; + assertTrue(validator.isValid(json)); + } + + @Test + public void givenValidArrayJson_whenValidatingNonStrict_thenValid() { + String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; + assertTrue(validator.isValid(json)); + } + + @Test + public void givenInvalidJson_whenValidatingNonStrict_thenValid() { + String json = "Invalid_Json"; + assertTrue(validator.isValid(json)); + } + + @Test + public void givenInvalidJson_whenValidatingStrict_thenInvalid() { + String json = "Invalid_Json"; + assertFalse(validator.isValidStrict(json)); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java new file mode 100644 index 000000000000..b633af7fdc72 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.jsonvalidation; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class JacksonValidatorUnitTest { + + private final JacksonValidator validator = new JacksonValidator(); + + @Test + public void givenValidObjectJson_whenValidating_thenValid() { + String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; + assertTrue(validator.isValid(json)); + } + + @Test + public void givenValidArrayJson_whenValidating_thenValid() { + String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; + assertTrue(validator.isValid(json)); + } + + @Test + public void givenInvalidJson_whenValidating_thenInvalid() { + String json = "Invalid_Json"; + assertFalse(validator.isValid(json)); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java new file mode 100644 index 000000000000..a590b3f7094f --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.jsonvalidation; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class JsonValidatorUnitTest { + + private final JsonValidator validator = new JsonValidator(); + + @Test + public void givenValidObjectJson_whenValidatingObject_thenValid() { + String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; + assertTrue(validator.isValidObject(json)); + } + + @Test + public void givenInvalidJson_whenValidating_thenInvalid() { + String json = "Invalid_Json"; + assertFalse(validator.isValidObject(json)); + } + + @Test + public void givenValidArrayJson_whenValidatingObject_thenInvalid() { + String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; + assertFalse(validator.isValidObject(json)); + } + + @Test + public void givenValidJson_whenValidatingJson_thenValid() { + String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; + assertTrue(validator.isValidJson(json)); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java new file mode 100644 index 000000000000..63d80bfe5868 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java @@ -0,0 +1,105 @@ +package com.baeldung.moshi; + +import java.io.IOException; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.time.Instant; + +import com.squareup.moshi.FromJson; +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.JsonQualifier; +import com.squareup.moshi.Moshi; +import com.squareup.moshi.ToJson; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.junit.Test; + +public class AlternativeAdapterUnitTest { + @Test + public void whenSerializing_thenAlternativeAdapterUsed() { + Moshi moshi = new Moshi.Builder() + .add(new EpochMillisAdapter()) + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + String json = jsonAdapter.toJson(new Post("Introduction to Moshi Json", "Baeldung", Instant.now())); + System.out.println(json); + } + + @Test + public void whenDeserializing_thenAlternativeAdapterUsed() throws IOException { + Moshi moshi = new Moshi.Builder() + .add(new EpochMillisAdapter()) + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + String json = "{\"author\":\"Baeldung\",\"posted\":1582095269204,\"title\":\"Introduction to Moshi Json\"}"; + Post post = jsonAdapter.fromJson(json); + System.out.println(post); + + } + + public static class Post { + String title; + String author; + @EpochMillis Instant posted; + + public Post() { + } + + public Post(String title, String author, Instant posted) { + this.title = title; + this.author = author; + this.posted = posted; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public Instant getPosted() { + return posted; + } + + public void setPosted(Instant posted) { + this.posted = posted; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("title", title).append("author", author).append("posted", posted) + .toString(); + } + } + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) + @JsonQualifier + public @interface EpochMillis { + } + + public static class EpochMillisAdapter { + @ToJson + public Long toJson(@EpochMillis Instant input) { + return input.toEpochMilli(); + } + @FromJson + @EpochMillis + public Instant fromJson(Long input) { + return Instant.ofEpochMilli(input); + } + + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java new file mode 100644 index 000000000000..83bb2bb1283d --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.moshi; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.List; + +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import com.squareup.moshi.Types; +import org.junit.Test; + +public class ArrayUnitTest { + @Test + public void whenSerializingList_thenJsonArrayProduced() { + Moshi moshi = new Moshi.Builder() + .build(); + Type type = Types.newParameterizedType(List.class, String.class); + JsonAdapter> jsonAdapter = moshi.adapter(type); + + String json = jsonAdapter.toJson(Arrays.asList("One", "Two", "Three")); + System.out.println(json); + } + + @Test + public void whenDeserializingJsonArray_thenListProduced() throws IOException { + Moshi moshi = new Moshi.Builder() + .build(); + Type type = Types.newParameterizedType(List.class, String.class); + JsonAdapter> jsonAdapter = moshi.adapter(type); + + String json = "[\"One\",\"Two\",\"Three\"]"; + List result = jsonAdapter.fromJson(json); + System.out.println(result); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java new file mode 100644 index 000000000000..f0f8e9a95d45 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java @@ -0,0 +1,94 @@ +package com.baeldung.moshi; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import com.squareup.moshi.FromJson; +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import com.squareup.moshi.ToJson; +import org.junit.Test; + +public class ComplexAdapterUnitTest { + @Test + public void whenSerializing_thenCorrectJsonProduced() { + Moshi moshi = new Moshi.Builder() + .add(new JsonDateTimeAdapter()) + .build(); + JsonAdapter jsonAdapter = moshi.adapter(ZonedDateTime.class); + + String json = jsonAdapter.toJson(ZonedDateTime.now()); + System.out.println(json); + } + + @Test + public void whenDeserializing_thenCorrectJsonConsumed() throws IOException { + Moshi moshi = new Moshi.Builder() + .add(new JsonDateTimeAdapter()) + .build(); + JsonAdapter jsonAdapter = moshi.adapter(ZonedDateTime.class); + + String json = "{\"date\":\"2020-02-17\",\"time\":\"07:53:27.064\",\"timezone\":\"Europe/London\"}"; + ZonedDateTime now = jsonAdapter.fromJson(json); + System.out.println(now); + + } + + public static class JsonDateTimeAdapter { + @ToJson + public JsonDateTime toJson(ZonedDateTime input) { + String date = input.toLocalDate().toString(); + String time = input.toLocalTime().toString(); + String timezone = input.getZone().toString(); + return new JsonDateTime(date, time, timezone); + } + @FromJson + public ZonedDateTime fromJson(JsonDateTime input) { + LocalDate date = LocalDate.parse(input.getDate()); + LocalTime time = LocalTime.parse(input.getTime()); + ZoneId timezone = ZoneId.of(input.getTimezone()); + return ZonedDateTime.of(date, time, timezone); + } + } + public static class JsonDateTime { + private String date; + private String time; + private String timezone; + + public JsonDateTime() { + } + + public JsonDateTime(String date, String time, String timezone) { + this.date = date; + this.time = time; + this.timezone = timezone; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java new file mode 100644 index 000000000000..0b4ecc23a561 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java @@ -0,0 +1,68 @@ +package com.baeldung.moshi; + +import java.io.IOException; +import java.time.Instant; + +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.junit.Test; + +public class DefaultUnitTest { + + @Test + public void whenDeserializing_thenFieldsGetDefaultValues() throws IOException { + Moshi moshi = new Moshi.Builder() + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + String json = "{\"title\":\"My Post\"}"; + Post post = jsonAdapter.fromJson(json); + System.out.println(post); + } + public static class Post { + private String title; + private String author; + private String posted; + + public Post() { + posted = Instant.now().toString(); + } + + public Post(String title, String author, String posted) { + this.title = title; + this.author = author; + this.posted = posted; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getPosted() { + return posted; + } + + public void setPosted(String posted) { + this.posted = posted; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("title", title).append("author", author).append("posted", posted) + .toString(); + } + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java new file mode 100644 index 000000000000..e26e93ba8c38 --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java @@ -0,0 +1,77 @@ +package com.baeldung.moshi; + +import java.io.IOException; + +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.junit.Test; + +public class PrimitiveUnitTest { + @Test + public void whenSerializing_thenCorrectJsonProduced() { + Moshi moshi = new Moshi.Builder() + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + Post post = new Post("My Post", "Baeldung", "This is my post"); + String json = jsonAdapter.toJson(post); + System.out.println(json); + } + + @Test + public void whenDeserializing_thenCorrectJsonConsumed() throws IOException { + Moshi moshi = new Moshi.Builder() + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + String json = "{\"author\":\"Baeldung\",\"text\":\"This is my post\",\"title\":\"My Post\"}"; + Post post = jsonAdapter.fromJson(json); + System.out.println(post); + } + + public static class Post { + private String title; + private String author; + private String text; + + public Post() { + } + + public Post(String title, String author, String text) { + this.title = title; + this.author = author; + this.text = text; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("title", title).append("author", author).append("text", text) + .toString(); + } + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java new file mode 100644 index 000000000000..2118538a190d --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java @@ -0,0 +1,68 @@ +package com.baeldung.moshi; + +import java.io.IOException; + +import com.squareup.moshi.Json; +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.junit.jupiter.api.Test; + +public class RenameUnitTest { + + @Test + public void whenSerializing_thenFieldsGetRenamed() { + Moshi moshi = new Moshi.Builder() + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + Post post = new Post("My Post", "Baeldung"); + String json = jsonAdapter.toJson(post); + System.out.println(json); + } + + @Test + public void whenSerializing_thenRenamedFieldsGetConsumed() throws IOException { + Moshi moshi = new Moshi.Builder() + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + String json = "{\"authored_by\":\"Baeldung\",\"title\":\"My Post\"}"; + Post post = jsonAdapter.fromJson(json); + System.out.println(post); + } + public static class Post { + private String title; + @Json(name = "authored_by") + private String author; + + public Post() { + } + + public Post(String title, String author) { + this.title = title; + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("title", title).append("author", author).toString(); + } + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java new file mode 100644 index 000000000000..e0be2f8a666b --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java @@ -0,0 +1,129 @@ +package com.baeldung.moshi; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.squareup.moshi.FromJson; +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import com.squareup.moshi.ToJson; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.junit.Test; + +public class SimpleAdapterUnitTest { + @Test + public void whenSerializing_thenAdapterUsed() { + Moshi moshi = new Moshi.Builder() + .add(new AuthorAdapter()) + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + Post post = new Post("My Post", new Author("Baeldung", "baeldung@example.com"), "This is my post"); + String json = jsonAdapter.toJson(post); + System.out.println(json); + } + + @Test + public void whenDeserializing_thenAdapterUsed() throws IOException { + Moshi moshi = new Moshi.Builder() + .add(new AuthorAdapter()) + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + String json = "{\"author\":\"Baeldung \",\"text\":\"This is my post\",\"title\":\"My Post\"}"; + Post post = jsonAdapter.fromJson(json); + System.out.println(post); + } + public static class AuthorAdapter { + private Pattern pattern = Pattern.compile("^(.*) <(.*)>$"); + @ToJson + public String toJson(Author author) { + return author.name + " <" + author.email + ">"; + } + + @FromJson + public Author fromJson(String author) { + Matcher matcher = pattern.matcher(author); + return matcher.find() ? new Author(matcher.group(1), matcher.group(2)) : null; + } + } + + public static class Author { + private String name; + private String email; + + public Author() { + } + + public Author(String name, String email) { + this.name = name; + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("name", name).append("email", email).toString(); + } + } + public static class Post { + private String title; + private Author author; + private String text; + + public Post() { + } + + public Post(String title, Author author, String text) { + this.title = title; + this.author = author; + this.text = text; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Author getAuthor() { + return author; + } + + public void setAuthor(Author author) { + this.author = author; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("title", title).append("author", author).append("text", text) + .toString(); + } + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java new file mode 100644 index 000000000000..2554e937b34f --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java @@ -0,0 +1,66 @@ +package com.baeldung.moshi; + +import java.io.IOException; + +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.junit.jupiter.api.Test; + +public class TransientUnitTest { + + @Test + public void whenSerializing_thenTransientFieldIgnored() { + Moshi moshi = new Moshi.Builder() + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + Post post = new Post("My Post", "Baeldung"); + String json = jsonAdapter.toJson(post); + System.out.println(json); + } + + @Test + public void whenDeserializing_thenTransientFieldIgnored() throws IOException { + Moshi moshi = new Moshi.Builder() + .build(); + JsonAdapter jsonAdapter = moshi.adapter(Post.class); + + String json = "{\"authored_by\":\"Baeldung\",\"title\":\"My Post\"}"; + Post post = jsonAdapter.fromJson(json); + System.out.println(post); + } + public static class Post { + private String title; + private transient String author; + + public Post() { + } + + public Post(String title, String author) { + this.title = title; + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("title", title).append("author", author).toString(); + } + } +} diff --git a/json-modules/json-2/src/test/resources/Student.json b/json-modules/json-2/src/test/resources/Student.json new file mode 100644 index 000000000000..7ff3351e8e74 --- /dev/null +++ b/json-modules/json-2/src/test/resources/Student.json @@ -0,0 +1 @@ +{"id":1,"name":{"firstName": "Joe", "surname":"Blogg"}} diff --git a/json-modules/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-modules/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java new file mode 100644 index 000000000000..38ebb8a0f8aa --- /dev/null +++ b/json-modules/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java @@ -0,0 +1,213 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "salary", + "topics" +}) +@Generated("jsonschema2pojo") +public class SamplePojo { + + @JsonProperty("name") + private String name; + @JsonProperty("area") + private String area; + @JsonProperty("author") + private String author; + @JsonProperty("id") + private Integer id; + @JsonProperty("salary") + private Integer salary; + @JsonProperty("topics") + private List topics = new ArrayList(); + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + public SamplePojo withName(String name) { + this.name = name; + return this; + } + + @JsonProperty("area") + public String getArea() { + return area; + } + + @JsonProperty("area") + public void setArea(String area) { + this.area = area; + } + + public SamplePojo withArea(String area) { + this.area = area; + return this; + } + + @JsonProperty("author") + public String getAuthor() { + return author; + } + + @JsonProperty("author") + public void setAuthor(String author) { + this.author = author; + } + + public SamplePojo withAuthor(String author) { + this.author = author; + return this; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + public SamplePojo withId(Integer id) { + this.id = id; + return this; + } + + @JsonProperty("salary") + public Integer getSalary() { + return salary; + } + + @JsonProperty("salary") + public void setSalary(Integer salary) { + this.salary = salary; + } + + public SamplePojo withSalary(Integer salary) { + this.salary = salary; + return this; + } + + @JsonProperty("topics") + public List getTopics() { + return topics; + } + + @JsonProperty("topics") + public void setTopics(List topics) { + this.topics = topics; + } + + public SamplePojo withTopics(List topics) { + this.topics = topics; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public SamplePojo withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("name"); + sb.append('='); + sb.append(((this.name == null)?"":this.name)); + sb.append(','); + sb.append("area"); + sb.append('='); + sb.append(((this.area == null)?"":this.area)); + sb.append(','); + sb.append("author"); + sb.append('='); + sb.append(((this.author == null)?"":this.author)); + sb.append(','); + sb.append("id"); + sb.append('='); + sb.append(((this.id == null)?"":this.id)); + sb.append(','); + sb.append("salary"); + sb.append('='); + sb.append(((this.salary == null)?"":this.salary)); + sb.append(','); + sb.append("topics"); + sb.append('='); + sb.append(((this.topics == null)?"":this.topics)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof SamplePojo) == false) { + return false; + } + SamplePojo rhs = ((SamplePojo) other); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); + } + +} diff --git a/json-modules/json-2/src/test/resources/json_optimization_mock_data.json b/json-modules/json-2/src/test/resources/json_optimization_mock_data.json new file mode 100644 index 000000000000..e09517cf6199 --- /dev/null +++ b/json-modules/json-2/src/test/resources/json_optimization_mock_data.json @@ -0,0 +1,1000 @@ +[{"id":1,"firstName":"Horatius","lastName":"Strognell","street":"4848 New Castle Point","postalCode":"33432","city":"Boca Raton","state":"FL","phoneNumber":"561-824-9105","email":"hstrognell0@dailymail.co.uk"}, +{"id":2,"firstName":"Kerri","lastName":"Arend","street":"4 Welch Pass","postalCode":"60669","city":"Chicago","state":"IL","phoneNumber":"312-303-5993"}, +{"id":3,"firstName":"Silvano","lastName":"Bartholomaus","street":"2491 Arkansas Center","postalCode":"30195","city":"Duluth","state":"GA","email":"sbartholomaus2@prlog.org"}, +{"id":4,"firstName":"Venita","lastName":"Burgoine","street":"63894 Sage Park","postalCode":"67215","city":"Wichita","state":"KS","email":"vburgoine3@telegraph.co.uk"}, +{"id":5,"firstName":"Meghan","lastName":"Westover","street":"76 Pleasure Way","postalCode":"77388","city":"Spring","state":"TX","phoneNumber":"832-926-0689","email":"mwestover4@cnn.com"}, +{"id":6,"firstName":"Mia","lastName":"Baversor","street":"50 Sommers Road","postalCode":"43204","city":"Columbus","state":"OH","email":"mbaversor5@wsj.com"}, +{"id":7,"firstName":"Winna","lastName":"Buggy","street":"05 Jenna Street","postalCode":"68144","city":"Omaha","state":"NE","phoneNumber":"402-740-7818"}, +{"id":8,"firstName":"Antonin","lastName":"Autrie","street":"9 Fieldstone Terrace","postalCode":"85754","city":"Tucson","state":"AZ"}, +{"id":9,"firstName":"Maddi","lastName":"Ollerearnshaw","street":"061 Crowley Trail","postalCode":"48335","city":"Farmington","state":"MI","phoneNumber":"248-709-8128"}, +{"id":10,"firstName":"Fawnia","lastName":"Cristofaro","street":"92571 Kinsman Alley","postalCode":"77271","city":"Houston","state":"TX","email":"fcristofaro9@ox.ac.uk"}, +{"id":11,"firstName":"Zachariah","lastName":"Rouby","street":"2439 Hudson Circle","postalCode":"25313","city":"Charleston","state":"WV","phoneNumber":"304-587-5444"}, +{"id":12,"firstName":"Brier","lastName":"Benech","street":"3144 Sutteridge Place","postalCode":"20380","city":"Washington","state":"DC","phoneNumber":"202-740-8851","email":"bbenechb@zdnet.com"}, +{"id":13,"firstName":"Merry","lastName":"Leming","street":"419 Kropf Terrace","postalCode":"45440","city":"Dayton","state":"OH","email":"mlemingc@ow.ly"}, +{"id":14,"firstName":"Audrey","lastName":"Dilleston","street":"61 Melrose Trail","postalCode":"97306","city":"Salem","state":"OR","phoneNumber":"503-480-6254"}, +{"id":15,"firstName":"De witt","lastName":"Kedge","street":"819 Kingsford Point","postalCode":"84135","city":"Salt Lake City","state":"UT"}, +{"id":16,"firstName":"Charita","lastName":"de Clerc","street":"42 Loftsgordon Hill","postalCode":"28289","city":"Charlotte","state":"NC","phoneNumber":"704-532-8850","email":"cdeclercf@comsenz.com"}, +{"id":17,"firstName":"Edgard","lastName":"Bloore","street":"1659 Donald Trail","postalCode":"20051","city":"Washington","state":"DC"}, +{"id":18,"firstName":"Kristi","lastName":"Richichi","street":"11306 Longview Hill","postalCode":"75372","city":"Dallas","state":"TX","email":"krichichih@cloudflare.com"}, +{"id":19,"firstName":"Denna","lastName":"Cornford","street":"4 Gale Junction","postalCode":"10014","city":"New York City","state":"NY","phoneNumber":"646-273-3067","email":"dcornfordi@ebay.co.uk"}, +{"id":20,"firstName":"Randall","lastName":"McQuaid","street":"55712 Stone Corner Circle","postalCode":"10203","city":"New York City","state":"NY","email":"rmcquaidj@facebook.com"}, +{"id":21,"firstName":"Kirbie","lastName":"Walczak","street":"9 Coleman Road","postalCode":"99252","city":"Spokane","state":"WA","email":"kwalczakk@spotify.com"}, +{"id":22,"firstName":"Zedekiah","lastName":"Westby","street":"9 Victoria Road","postalCode":"22093","city":"Ashburn","state":"VA","phoneNumber":"571-642-0111","email":"zwestbyl@ox.ac.uk"}, +{"id":23,"firstName":"Corri","lastName":"Snar","street":"4 Service Terrace","postalCode":"68517","city":"Lincoln","state":"NE","email":"csnarm@tinyurl.com"}, +{"id":24,"firstName":"Manny","lastName":"Marchington","street":"942 Westend Center","postalCode":"22119","city":"Merrifield","state":"VA","email":"mmarchingtonn@opensource.org"}, +{"id":25,"firstName":"Ashla","lastName":"Grigoroni","street":"755 Lerdahl Parkway","postalCode":"55423","city":"Minneapolis","state":"MN","phoneNumber":"612-797-7928","email":"agrigoronio@cam.ac.uk"}, +{"id":26,"firstName":"Rita","lastName":"Sharratt","street":"710 Buena Vista Avenue","postalCode":"40576","city":"Lexington","state":"KY","phoneNumber":"859-727-0697"}, +{"id":27,"firstName":"Karrie","lastName":"Crathorne","street":"02 Loeprich Place","postalCode":"39505","city":"Gulfport","state":"MS"}, +{"id":28,"firstName":"Lothario","lastName":"Merck","street":"46 Golden Leaf Park","postalCode":"35205","city":"Birmingham","state":"AL"}, +{"id":29,"firstName":"Renault","lastName":"Banister","street":"7 Garrison Plaza","postalCode":"85072","city":"Phoenix","state":"AZ"}, +{"id":30,"firstName":"Wanda","lastName":"Burkart","street":"10 Mendota Place","postalCode":"48258","city":"Detroit","state":"MI","phoneNumber":"248-870-5185","email":"wburkartt@wikipedia.org"}, +{"id":31,"firstName":"Maggy","lastName":"Timby","street":"37 Crest Line Center","postalCode":"50305","city":"Des Moines","state":"IA","email":"mtimbyu@cnbc.com"}, +{"id":32,"firstName":"Chet","lastName":"Origan","street":"767 Bashford Lane","postalCode":"30919","city":"Augusta","state":"GA","email":"coriganv@behance.net"}, +{"id":33,"firstName":"Jammie","lastName":"Aslie","street":"7174 Hoffman Circle","postalCode":"23464","city":"Virginia Beach","state":"VA"}, +{"id":34,"firstName":"Dill","lastName":"Kingdon","street":"75 Corben Crossing","postalCode":"33013","city":"Hialeah","state":"FL","email":"dkingdonx@ibm.com"}, +{"id":35,"firstName":"Berenice","lastName":"Blodget","street":"8 Eliot Junction","postalCode":"93907","city":"Salinas","state":"CA","email":"bblodgety@blogs.com"}, +{"id":36,"firstName":"Kimberley","lastName":"Streatley","street":"56 Welch Center","postalCode":"77070","city":"Houston","state":"TX"}, +{"id":37,"firstName":"Warde","lastName":"Woodwind","street":"773 Gerald Park","postalCode":"35295","city":"Birmingham","state":"AL","email":"wwoodwind10@wsj.com"}, +{"id":38,"firstName":"Husain","lastName":"Christofe","street":"35118 Forest Dale Avenue","postalCode":"10175","city":"New York City","state":"NY","phoneNumber":"212-611-7995","email":"hchristofe11@seesaa.net"}, +{"id":39,"firstName":"Gertrud","lastName":"Defraine","street":"568 Walton Way","postalCode":"37405","city":"Chattanooga","state":"TN","phoneNumber":"423-125-5719","email":"gdefraine12@xrea.com"}, +{"id":40,"firstName":"Yulma","lastName":"Ramshay","street":"9976 Iowa Drive","postalCode":"87121","city":"Albuquerque","state":"NM","phoneNumber":"505-914-5281"}, +{"id":41,"firstName":"Bride","lastName":"Amsberger","street":"3 Service Lane","postalCode":"28272","city":"Charlotte","state":"NC","email":"bamsberger14@forbes.com"}, +{"id":42,"firstName":"Kaiser","lastName":"Froud","street":"7 Starling Lane","postalCode":"99507","city":"Anchorage","state":"AK","email":"kfroud15@cloudflare.com"}, +{"id":43,"firstName":"Leona","lastName":"Sciusscietto","street":"06392 East Lane","postalCode":"60193","city":"Schaumburg","state":"IL","phoneNumber":"630-981-3986","email":"lsciusscietto16@mit.edu"}, +{"id":44,"firstName":"Sibel","lastName":"Ripsher","street":"8672 Bayside Road","postalCode":"32511","city":"Pensacola","state":"FL","phoneNumber":"850-975-6365","email":"sripsher17@sitemeter.com"}, +{"id":45,"firstName":"Megen","lastName":"Dymond","street":"0547 Harper Place","postalCode":"28220","city":"Charlotte","state":"NC","phoneNumber":"704-632-5850"}, +{"id":46,"firstName":"Vitoria","lastName":"Niese","street":"365 Colorado Plaza","postalCode":"15279","city":"Pittsburgh","state":"PA","phoneNumber":"412-864-8563"}, +{"id":47,"firstName":"Cherianne","lastName":"Daveran","street":"5 Esch Parkway","postalCode":"36104","city":"Montgomery","state":"AL","email":"cdaveran1a@ft.com"}, +{"id":48,"firstName":"Harriott","lastName":"Mallam","street":"9 Monterey Place","postalCode":"20215","city":"Washington","state":"DC","phoneNumber":"202-727-0645"}, +{"id":49,"firstName":"Jozef","lastName":"Stranger","street":"07 Warner Drive","postalCode":"84199","city":"Salt Lake City","state":"UT","phoneNumber":"801-741-5946"}, +{"id":50,"firstName":"Teena","lastName":"Broggio","street":"287 Luster Park","postalCode":"78285","city":"San Antonio","state":"TX","phoneNumber":"210-482-0822","email":"tbroggio1d@craigslist.org"}, +{"id":51,"firstName":"Robin","lastName":"Membry","street":"0736 Forest Dale Crossing","postalCode":"45408","city":"Dayton","state":"OH","phoneNumber":"937-335-4964","email":"rmembry1e@toplist.cz"}, +{"id":52,"firstName":"Holly","lastName":"Lowcock","street":"819 Aberg Pass","postalCode":"28815","city":"Asheville","state":"NC","email":"hlowcock1f@bbc.co.uk"}, +{"id":53,"firstName":"Shandee","lastName":"Blowick","street":"81600 Moose Lane","postalCode":"46867","city":"Fort Wayne","state":"IN","phoneNumber":"260-904-5622"}, +{"id":54,"firstName":"Chaim","lastName":"Stilliard","street":"91 Spohn Court","postalCode":"28305","city":"Fayetteville","state":"NC","phoneNumber":"910-721-3938"}, +{"id":55,"firstName":"Maximilien","lastName":"Purkis","street":"66997 Algoma Park","postalCode":"10150","city":"New York City","state":"NY","phoneNumber":"212-824-3363","email":"mpurkis1i@unblog.fr"}, +{"id":56,"firstName":"Ferguson","lastName":"Whiles","street":"0550 Bowman Street","postalCode":"33142","city":"Miami","state":"FL","phoneNumber":"786-416-2947","email":"fwhiles1j@artisteer.com"}, +{"id":57,"firstName":"Elena","lastName":"Poyle","street":"54 Warner Court","postalCode":"28055","city":"Gastonia","state":"NC","email":"epoyle1k@tripod.com"}, +{"id":58,"firstName":"Carney","lastName":"Pengilly","street":"050 Welch Junction","postalCode":"76147","city":"Fort Worth","state":"TX","phoneNumber":"817-525-7801","email":"cpengilly1l@yellowpages.com"}, +{"id":59,"firstName":"Krispin","lastName":"Pouck","street":"03554 Twin Pines Point","postalCode":"55551","city":"Young America","state":"MN","email":"kpouck1m@nymag.com"}, +{"id":60,"firstName":"Kylie","lastName":"Osmar","street":"7 Milwaukee Plaza","postalCode":"45228","city":"Cincinnati","state":"OH","phoneNumber":"513-940-5020","email":"kosmar1n@storify.com"}, +{"id":61,"firstName":"Trudi","lastName":"Standrin","street":"526 Onsgard Park","postalCode":"12237","city":"Albany","state":"NY","email":"tstandrin1o@sfgate.com"}, +{"id":62,"firstName":"Frank","lastName":"Belt","street":"52 Stang Lane","postalCode":"27455","city":"Greensboro","state":"NC"}, +{"id":63,"firstName":"Nerita","lastName":"Daulton","street":"03 Sutherland Court","postalCode":"55417","city":"Minneapolis","state":"MN","phoneNumber":"651-796-2028"}, +{"id":64,"firstName":"Urbanus","lastName":"Camm","street":"6802 Weeping Birch Circle","postalCode":"92115","city":"San Diego","state":"CA","email":"ucamm1r@ucoz.com"}, +{"id":65,"firstName":"Perry","lastName":"Struther","street":"63916 Corry Alley","postalCode":"28805","city":"Asheville","state":"NC","phoneNumber":"828-821-0824","email":"pstruther1s@nih.gov"}, +{"id":66,"firstName":"Zorina","lastName":"Uc","street":"99 Merry Circle","postalCode":"37250","city":"Nashville","state":"TN","phoneNumber":"615-364-4726","email":"zuc1t@cbc.ca"}, +{"id":67,"firstName":"Ajay","lastName":"Rediers","street":"6872 Armistice Lane","postalCode":"92812","city":"Anaheim","state":"CA","phoneNumber":"714-845-0143"}, +{"id":68,"firstName":"Brendis","lastName":"Goor","street":"94 Mccormick Place","postalCode":"77346","city":"Humble","state":"TX","phoneNumber":"713-910-5956"}, +{"id":69,"firstName":"Barbey","lastName":"Konneke","street":"75613 Miller Trail","postalCode":"30328","city":"Atlanta","state":"GA","phoneNumber":"770-208-1453"}, +{"id":70,"firstName":"Adlai","lastName":"Colly","street":"4446 Loftsgordon Place","postalCode":"40576","city":"Lexington","state":"KY","email":"acolly1x@phpbb.com"}, +{"id":71,"firstName":"Libby","lastName":"Wherton","street":"9313 Buell Road","postalCode":"70116","city":"New Orleans","state":"LA","email":"lwherton1y@flickr.com"}, +{"id":72,"firstName":"Niko","lastName":"Stockell","street":"61 Havey Park","postalCode":"10034","city":"New York City","state":"NY","phoneNumber":"646-814-6395","email":"nstockell1z@xrea.com"}, +{"id":73,"firstName":"Phillip","lastName":"Dadley","street":"14534 Victoria Street","postalCode":"33906","city":"Fort Myers","state":"FL","email":"pdadley20@studiopress.com"}, +{"id":74,"firstName":"Leann","lastName":"Hebburn","street":"9 Center Place","postalCode":"84140","city":"Salt Lake City","state":"UT","email":"lhebburn21@1688.com"}, +{"id":75,"firstName":"Raynor","lastName":"Gernier","street":"5923 Gale Plaza","postalCode":"79118","city":"Amarillo","state":"TX"}, +{"id":76,"firstName":"Elmore","lastName":"Frankton","street":"770 Wayridge Crossing","postalCode":"14619","city":"Rochester","state":"NY"}, +{"id":77,"firstName":"Teresina","lastName":"Rives","street":"51261 Sycamore Terrace","postalCode":"63180","city":"Saint Louis","state":"MO","email":"trives24@cbsnews.com"}, +{"id":78,"firstName":"Pancho","lastName":"Thebeaud","street":"72 Pierstorff Way","postalCode":"33705","city":"Saint Petersburg","state":"FL","phoneNumber":"813-335-3556"}, +{"id":79,"firstName":"Deanne","lastName":"Crighton","street":"95 Duke Plaza","postalCode":"71151","city":"Shreveport","state":"LA","phoneNumber":"318-218-7196","email":"dcrighton26@sphinn.com"}, +{"id":80,"firstName":"Brucie","lastName":"Bury","street":"8948 Knutson Lane","postalCode":"93740","city":"Fresno","state":"CA","email":"bbury27@twitter.com"}, +{"id":81,"firstName":"Joleen","lastName":"Flack","street":"8007 Morningstar Street","postalCode":"33283","city":"Miami","state":"FL","phoneNumber":"305-459-0365"}, +{"id":82,"firstName":"Antonino","lastName":"Matelyunas","street":"2585 Gale Road","postalCode":"20591","city":"Washington","state":"DC","phoneNumber":"202-780-3589"}, +{"id":83,"firstName":"Vinnie","lastName":"Syne","street":"6 Fallview Pass","postalCode":"20231","city":"Washington","state":"DC","phoneNumber":"202-648-5977","email":"vsyne2a@etsy.com"}, +{"id":84,"firstName":"Sig","lastName":"Guillotin","street":"6 Buell Lane","postalCode":"46015","city":"Anderson","state":"IN","phoneNumber":"765-948-7663","email":"sguillotin2b@cisco.com"}, +{"id":85,"firstName":"Gabriel","lastName":"Vasyukhichev","street":"25801 Grasskamp Junction","postalCode":"45408","city":"Dayton","state":"OH","email":"gvasyukhichev2c@mac.com"}, +{"id":86,"firstName":"Casie","lastName":"Burgill","street":"0 Dapin Alley","postalCode":"37410","city":"Chattanooga","state":"TN"}, +{"id":87,"firstName":"Kristan","lastName":"Chalice","street":"5118 Calypso Junction","postalCode":"78721","city":"Austin","state":"TX","phoneNumber":"512-831-2347"}, +{"id":88,"firstName":"Brear","lastName":"Pruckner","street":"2 Corscot Street","postalCode":"53790","city":"Madison","state":"WI"}, +{"id":89,"firstName":"Estella","lastName":"Orpyne","street":"293 Hansons Plaza","postalCode":"55579","city":"Maple Plain","state":"MN","phoneNumber":"952-666-6951","email":"eorpyne2g@examiner.com"}, +{"id":90,"firstName":"Conroy","lastName":"de Banke","street":"40636 Farmco Park","postalCode":"30316","city":"Atlanta","state":"GA","phoneNumber":"404-199-0073","email":"cdebanke2h@prweb.com"}, +{"id":91,"firstName":"Elmira","lastName":"Bracken","street":"10 Macpherson Place","postalCode":"85099","city":"Phoenix","state":"AZ","phoneNumber":"602-991-7768","email":"ebracken2i@sourceforge.net"}, +{"id":92,"firstName":"Carlota","lastName":"Vasilechko","street":"33 American Ash Point","postalCode":"75507","city":"Texarkana","state":"TX","phoneNumber":"903-312-0610","email":"cvasilechko2j@nba.com"}, +{"id":93,"firstName":"Jamesy","lastName":"Valentelli","street":"59634 Charing Cross Trail","postalCode":"31416","city":"Savannah","state":"GA","phoneNumber":"912-657-6729","email":"jvalentelli2k@nifty.com"}, +{"id":94,"firstName":"Hildagarde","lastName":"Sandels","street":"1 Lotheville Lane","postalCode":"32277","city":"Jacksonville","state":"FL","phoneNumber":"904-981-2753","email":"hsandels2l@a8.net"}, +{"id":95,"firstName":"Kip","lastName":"Cranidge","street":"2 South Road","postalCode":"19160","city":"Philadelphia","state":"PA"}, +{"id":96,"firstName":"Tobit","lastName":"Jarrette","street":"777 Mallard Trail","postalCode":"49444","city":"Muskegon","state":"MI","phoneNumber":"231-706-1988"}, +{"id":97,"firstName":"Tibold","lastName":"Michie","street":"87796 Nevada Junction","postalCode":"22093","city":"Ashburn","state":"VA","phoneNumber":"571-188-4893","email":"tmichie2o@mapy.cz"}, +{"id":98,"firstName":"Maximo","lastName":"Ifill","street":"8307 Tony Point","postalCode":"22225","city":"Arlington","state":"VA","phoneNumber":"571-404-1412"}, +{"id":99,"firstName":"Patti","lastName":"Autry","street":"901 Iowa Crossing","postalCode":"55551","city":"Young America","state":"MN","phoneNumber":"952-772-9107","email":"pautry2q@scientificamerican.com"}, +{"id":100,"firstName":"Cathe","lastName":"Jost","street":"4400 Menomonie Road","postalCode":"21211","city":"Baltimore","state":"MD","phoneNumber":"410-800-4683","email":"cjost2r@tuttocitta.it"}, +{"id":101,"firstName":"Byron","lastName":"Maddams","street":"10729 Oak Trail","postalCode":"78255","city":"San Antonio","state":"TX","phoneNumber":"830-263-4129"}, +{"id":102,"firstName":"Sosanna","lastName":"Paley","street":"82207 Park Meadow Court","postalCode":"77010","city":"Houston","state":"TX","phoneNumber":"832-740-8766","email":"spaley2t@salon.com"}, +{"id":103,"firstName":"Elysia","lastName":"Skerratt","street":"88708 Cambridge Drive","postalCode":"31217","city":"Macon","state":"GA","phoneNumber":"478-265-6579","email":"eskerratt2u@japanpost.jp"}, +{"id":104,"firstName":"Nealson","lastName":"Sieur","street":"1286 Elmside Plaza","postalCode":"20904","city":"Silver Spring","state":"MD"}, +{"id":105,"firstName":"Yasmeen","lastName":"Bazire","street":"91904 Elmside Point","postalCode":"73167","city":"Oklahoma City","state":"OK"}, +{"id":106,"firstName":"Mandy","lastName":"Ewart","street":"91 Norway Maple Street","postalCode":"21239","city":"Baltimore","state":"MD","email":"mewart2x@weebly.com"}, +{"id":107,"firstName":"Chlo","lastName":"Keedy","street":"560 Oak Valley Avenue","postalCode":"20420","city":"Washington","state":"DC"}, +{"id":108,"firstName":"Benedicta","lastName":"Dinneen","street":"9 Cottonwood Circle","postalCode":"60686","city":"Chicago","state":"IL","email":"bdinneen2z@nydailynews.com"}, +{"id":109,"firstName":"Nanon","lastName":"Corsar","street":"40001 Barby Drive","postalCode":"95818","city":"Sacramento","state":"CA","email":"ncorsar30@house.gov"}, +{"id":110,"firstName":"Babette","lastName":"Scarsbrick","street":"96095 Loomis Terrace","postalCode":"94622","city":"Oakland","state":"CA","email":"bscarsbrick31@smugmug.com"}, +{"id":111,"firstName":"Cornall","lastName":"Christauffour","street":"9 Springview Alley","postalCode":"84170","city":"Salt Lake City","state":"UT","phoneNumber":"801-935-1246","email":"cchristauffour32@booking.com"}, +{"id":112,"firstName":"Micki","lastName":"Labell","street":"77729 Heath Place","postalCode":"25336","city":"Charleston","state":"WV"}, +{"id":113,"firstName":"Marissa","lastName":"Bricksey","street":"1 Jackson Pass","postalCode":"11470","city":"Jamaica","state":"NY","phoneNumber":"917-552-4280"}, +{"id":114,"firstName":"Alex","lastName":"Lyptrade","street":"74 Bunting Circle","postalCode":"40591","city":"Lexington","state":"KY","phoneNumber":"859-177-0753"}, +{"id":115,"firstName":"Tove","lastName":"Bielfeldt","street":"95 Mallard Hill","postalCode":"70894","city":"Baton Rouge","state":"LA","email":"tbielfeldt36@goo.gl"}, +{"id":116,"firstName":"Rodrigo","lastName":"Chestle","street":"53625 1st Junction","postalCode":"43635","city":"Toledo","state":"OH","phoneNumber":"419-928-0953","email":"rchestle37@princeton.edu"}, +{"id":117,"firstName":"Ulrike","lastName":"Kendle","street":"0 Cardinal Alley","postalCode":"80925","city":"Colorado Springs","state":"CO","phoneNumber":"719-796-1992","email":"ukendle38@naver.com"}, +{"id":118,"firstName":"Sandor","lastName":"Warwick","street":"8 Spaight Crossing","postalCode":"92030","city":"Escondido","state":"CA","email":"swarwick39@about.com"}, +{"id":119,"firstName":"Selina","lastName":"Slowcock","street":"7 7th Circle","postalCode":"50335","city":"Des Moines","state":"IA","phoneNumber":"515-865-9809"}, +{"id":120,"firstName":"Maxine","lastName":"Placstone","street":"42056 Sycamore Plaza","postalCode":"20244","city":"Washington","state":"DC"}, +{"id":121,"firstName":"Ardine","lastName":"Reven","street":"10634 Nancy Way","postalCode":"10175","city":"New York City","state":"NY","email":"areven3c@diigo.com"}, +{"id":122,"firstName":"Dilan","lastName":"Widdows","street":"37 Park Meadow Way","postalCode":"68144","city":"Omaha","state":"NE","phoneNumber":"402-383-9020"}, +{"id":123,"firstName":"Kevina","lastName":"Praten","street":"8531 Elmside Point","postalCode":"27610","city":"Raleigh","state":"NC","email":"kpraten3e@craigslist.org"}, +{"id":124,"firstName":"Sherman","lastName":"Jurczak","street":"8281 Acker Alley","postalCode":"07522","city":"Paterson","state":"NJ","email":"sjurczak3f@github.com"}, +{"id":125,"firstName":"Beckie","lastName":"Disney","street":"3 Butterfield Drive","postalCode":"49518","city":"Grand Rapids","state":"MI","phoneNumber":"616-493-1284","email":"bdisney3g@china.com.cn"}, +{"id":126,"firstName":"Blaine","lastName":"Leak","street":"369 Norway Maple Lane","postalCode":"03804","city":"Portsmouth","state":"NH","email":"bleak3h@lulu.com"}, +{"id":127,"firstName":"Dare","lastName":"Marney","street":"50 Lake View Alley","postalCode":"06505","city":"New Haven","state":"CT","phoneNumber":"203-876-6938","email":"dmarney3i@delicious.com"}, +{"id":128,"firstName":"Darby","lastName":"Sackler","street":"841 Ridgeview Trail","postalCode":"80279","city":"Denver","state":"CO"}, +{"id":129,"firstName":"Aurilia","lastName":"Seabrocke","street":"670 Schmedeman Road","postalCode":"11254","city":"Brooklyn","state":"NY","email":"aseabrocke3k@engadget.com"}, +{"id":130,"firstName":"Griz","lastName":"Riccioppo","street":"2204 Moland Circle","postalCode":"45218","city":"Cincinnati","state":"OH","email":"griccioppo3l@cisco.com"}, +{"id":131,"firstName":"Zahara","lastName":"Quinion","street":"4979 Mallory Circle","postalCode":"24515","city":"Lynchburg","state":"VA","email":"zquinion3m@sfgate.com"}, +{"id":132,"firstName":"Holly-anne","lastName":"Fontel","street":"60752 Hallows Circle","postalCode":"76705","city":"Waco","state":"TX","phoneNumber":"254-822-2565","email":"hfontel3n@exblog.jp"}, +{"id":133,"firstName":"Johannes","lastName":"Lemonby","street":"3 Grover Terrace","postalCode":"25709","city":"Huntington","state":"WV","phoneNumber":"304-342-4911","email":"jlemonby3o@woothemes.com"}, +{"id":134,"firstName":"Melvin","lastName":"Kain","street":"16 Pond Junction","postalCode":"85215","city":"Mesa","state":"AZ","phoneNumber":"602-146-3701"}, +{"id":135,"firstName":"Letta","lastName":"Smelley","street":"537 Helena Circle","postalCode":"22119","city":"Merrifield","state":"VA","phoneNumber":"571-472-5640"}, +{"id":136,"firstName":"Clerc","lastName":"Mc Ilwrick","street":"7050 Northfield Street","postalCode":"90050","city":"Los Angeles","state":"CA","email":"cmcilwrick3r@abc.net.au"}, +{"id":137,"firstName":"Abba","lastName":"Sutherns","street":"8087 Monterey Lane","postalCode":"83757","city":"Boise","state":"ID","phoneNumber":"208-110-3153","email":"asutherns3s@dropbox.com"}, +{"id":138,"firstName":"Karola","lastName":"Symper","street":"4596 Clyde Gallagher Road","postalCode":"28815","city":"Asheville","state":"NC","email":"ksymper3t@parallels.com"}, +{"id":139,"firstName":"Jessamyn","lastName":"Deacock","street":"19557 Bobwhite Way","postalCode":"19725","city":"Newark","state":"DE","phoneNumber":"302-174-2938"}, +{"id":140,"firstName":"Iggy","lastName":"Impey","street":"8 Brown Place","postalCode":"27499","city":"Greensboro","state":"NC"}, +{"id":141,"firstName":"Kary","lastName":"Mably","street":"75 Porter Avenue","postalCode":"70174","city":"New Orleans","state":"LA","email":"kmably3w@miibeian.gov.cn"}, +{"id":142,"firstName":"Ciel","lastName":"Tidbold","street":"54 Mitchell Lane","postalCode":"90055","city":"Los Angeles","state":"CA"}, +{"id":143,"firstName":"Dyana","lastName":"Orcott","street":"2 Kinsman Street","postalCode":"90005","city":"Los Angeles","state":"CA","phoneNumber":"310-366-6987"}, +{"id":144,"firstName":"Damien","lastName":"Haking","street":"2 Elmside Point","postalCode":"62705","city":"Springfield","state":"IL","email":"dhaking3z@drupal.org"}, +{"id":145,"firstName":"Ricardo","lastName":"Bille","street":"3 Mesta Hill","postalCode":"98411","city":"Tacoma","state":"WA","email":"rbille40@ebay.co.uk"}, +{"id":146,"firstName":"Carlene","lastName":"Roget","street":"8 Granby Avenue","postalCode":"35225","city":"Birmingham","state":"AL","phoneNumber":"205-762-4907","email":"croget41@statcounter.com"}, +{"id":147,"firstName":"Sharlene","lastName":"Antusch","street":"02445 Stang Parkway","postalCode":"55480","city":"Minneapolis","state":"MN","email":"santusch42@mtv.com"}, +{"id":148,"firstName":"Goober","lastName":"Danielczyk","street":"474 Union Court","postalCode":"70505","city":"Lafayette","state":"LA","phoneNumber":"337-779-0312","email":"gdanielczyk43@dion.ne.jp"}, +{"id":149,"firstName":"Janette","lastName":"Mauro","street":"1231 Commercial Crossing","postalCode":"97201","city":"Portland","state":"OR","phoneNumber":"971-423-7259"}, +{"id":150,"firstName":"Melinda","lastName":"Shitliffe","street":"244 Derek Drive","postalCode":"23208","city":"Richmond","state":"VA","phoneNumber":"804-864-5845"}, +{"id":151,"firstName":"Constance","lastName":"Fardon","street":"3 Lien Point","postalCode":"89105","city":"Las Vegas","state":"NV"}, +{"id":152,"firstName":"Tedd","lastName":"Storey","street":"2551 Luster Point","postalCode":"19151","city":"Philadelphia","state":"PA","phoneNumber":"215-622-9273","email":"tstorey47@google.com.au"}, +{"id":153,"firstName":"Brigitte","lastName":"Slograve","street":"8130 Waubesa Hill","postalCode":"11499","city":"Jamaica","state":"NY","email":"bslograve48@yandex.ru"}, +{"id":154,"firstName":"Ralph","lastName":"Comberbeach","street":"88140 Anderson Avenue","postalCode":"90076","city":"Los Angeles","state":"CA"}, +{"id":155,"firstName":"Deloria","lastName":"Thomazet","street":"666 Center Crossing","postalCode":"38119","city":"Memphis","state":"TN","phoneNumber":"615-840-7916"}, +{"id":156,"firstName":"Fidel","lastName":"MacClay","street":"01 Fairfield Point","postalCode":"24034","city":"Roanoke","state":"VA","email":"fmacclay4b@sitemeter.com"}, +{"id":157,"firstName":"Amalee","lastName":"Menzies","street":"6 Judy Drive","postalCode":"84605","city":"Provo","state":"UT"}, +{"id":158,"firstName":"Ansel","lastName":"Jory","street":"3 Nobel Park","postalCode":"32505","city":"Pensacola","state":"FL","phoneNumber":"850-394-8201"}, +{"id":159,"firstName":"Teodor","lastName":"Longhorn","street":"563 Sutherland Avenue","postalCode":"98008","city":"Bellevue","state":"WA"}, +{"id":160,"firstName":"Margarita","lastName":"Rewcassell","street":"64711 Beilfuss Point","postalCode":"79764","city":"Odessa","state":"TX","phoneNumber":"432-413-2196"}, +{"id":161,"firstName":"Tarra","lastName":"Albro","street":"2 Graceland Way","postalCode":"78405","city":"Corpus Christi","state":"TX"}, +{"id":162,"firstName":"Whitaker","lastName":"Brizell","street":"6 Luster Place","postalCode":"33694","city":"Tampa","state":"FL","email":"wbrizell4h@naver.com"}, +{"id":163,"firstName":"Gauthier","lastName":"Getsham","street":"0820 Duke Plaza","postalCode":"28263","city":"Charlotte","state":"NC","phoneNumber":"704-510-2908"}, +{"id":164,"firstName":"Thane","lastName":"Discombe","street":"56809 Aberg Street","postalCode":"63167","city":"Saint Louis","state":"MO"}, +{"id":165,"firstName":"Felicia","lastName":"Barthrup","street":"904 Stuart Junction","postalCode":"32220","city":"Jacksonville","state":"FL"}, +{"id":166,"firstName":"Emeline","lastName":"Jobes","street":"2670 Prairieview Plaza","postalCode":"10120","city":"New York City","state":"NY","email":"ejobes4l@newyorker.com"}, +{"id":167,"firstName":"Felicle","lastName":"Bowie","street":"9715 Lighthouse Bay Parkway","postalCode":"11210","city":"Brooklyn","state":"NY","email":"fbowie4m@auda.org.au"}, +{"id":168,"firstName":"Clare","lastName":"Miskelly","street":"8 Towne Trail","postalCode":"44555","city":"Youngstown","state":"OH"}, +{"id":169,"firstName":"Mort","lastName":"Danat","street":"6833 Shoshone Lane","postalCode":"12255","city":"Albany","state":"NY","phoneNumber":"518-967-9791","email":"mdanat4o@privacy.gov.au"}, +{"id":170,"firstName":"Ailey","lastName":"Scatchar","street":"3 Northfield Point","postalCode":"76505","city":"Temple","state":"TX"}, +{"id":171,"firstName":"Kevina","lastName":"Darwent","street":"8165 Reinke Alley","postalCode":"94132","city":"San Francisco","state":"CA","email":"kdarwent4q@artisteer.com"}, +{"id":172,"firstName":"My","lastName":"Buston","street":"715 Saint Paul Center","postalCode":"31416","city":"Savannah","state":"GA","phoneNumber":"912-281-8654"}, +{"id":173,"firstName":"Emera","lastName":"Lingner","street":"943 Eastlawn Hill","postalCode":"90605","city":"Whittier","state":"CA"}, +{"id":174,"firstName":"Drucie","lastName":"Byer","street":"988 4th Court","postalCode":"06816","city":"Danbury","state":"CT","email":"dbyer4t@xinhuanet.com"}, +{"id":175,"firstName":"Modestine","lastName":"Madeley","street":"1 Delaware Terrace","postalCode":"80126","city":"Littleton","state":"CO"}, +{"id":176,"firstName":"Selie","lastName":"O'Mohun","street":"42 Monument Trail","postalCode":"55590","city":"Monticello","state":"MN","phoneNumber":"763-384-5166"}, +{"id":177,"firstName":"Shayla","lastName":"Pesselt","street":"7 Pawling Center","postalCode":"20099","city":"Washington","state":"DC","phoneNumber":"202-816-7300","email":"spesselt4w@posterous.com"}, +{"id":178,"firstName":"Raeann","lastName":"Layland","street":"06548 Longview Alley","postalCode":"77005","city":"Houston","state":"TX","phoneNumber":"214-899-1257","email":"rlayland4x@pcworld.com"}, +{"id":179,"firstName":"Dael","lastName":"Christaeas","street":"375 Northfield Street","postalCode":"23509","city":"Norfolk","state":"VA","phoneNumber":"757-391-2798","email":"dchristaeas4y@sciencedaily.com"}, +{"id":180,"firstName":"Nicolas","lastName":"Baxill","street":"9 Autumn Leaf Terrace","postalCode":"77005","city":"Houston","state":"TX","email":"nbaxill4z@edublogs.org"}, +{"id":181,"firstName":"Onida","lastName":"Pengilly","street":"61 Commercial Junction","postalCode":"24029","city":"Roanoke","state":"VA","email":"opengilly50@slideshare.net"}, +{"id":182,"firstName":"Muffin","lastName":"Thrasher","street":"1 Morning Hill","postalCode":"64082","city":"Lees Summit","state":"MO"}, +{"id":183,"firstName":"Ignaz","lastName":"McLugish","street":"3936 Columbus Point","postalCode":"35263","city":"Birmingham","state":"AL"}, +{"id":184,"firstName":"Guillaume","lastName":"Gillings","street":"75541 Sheridan Center","postalCode":"68510","city":"Lincoln","state":"NE","email":"ggillings53@unblog.fr"}, +{"id":185,"firstName":"Kalli","lastName":"Branche","street":"33740 Manitowish Court","postalCode":"96805","city":"Honolulu","state":"HI"}, +{"id":186,"firstName":"Winthrop","lastName":"Barszczewski","street":"9 Luster Terrace","postalCode":"60158","city":"Carol Stream","state":"IL","phoneNumber":"309-633-3125","email":"wbarszczewski55@eventbrite.com"}, +{"id":187,"firstName":"Renaud","lastName":"Nitto","street":"1 Crownhardt Place","postalCode":"10310","city":"Staten Island","state":"NY","phoneNumber":"914-568-4524","email":"rnitto56@typepad.com"}, +{"id":188,"firstName":"Pollyanna","lastName":"Wherrett","street":"31380 Upham Street","postalCode":"76134","city":"Fort Worth","state":"TX","phoneNumber":"817-198-3301","email":"pwherrett57@bluehost.com"}, +{"id":189,"firstName":"Lilly","lastName":"Gatchell","street":"7 Elka Road","postalCode":"94064","city":"Redwood City","state":"CA","email":"lgatchell58@patch.com"}, +{"id":190,"firstName":"Leopold","lastName":"Leavey","street":"9 Darwin Crossing","postalCode":"20268","city":"Washington","state":"DC","phoneNumber":"202-964-5932","email":"lleavey59@aol.com"}, +{"id":191,"firstName":"Byram","lastName":"Stuckes","street":"782 Northport Alley","postalCode":"55436","city":"Minneapolis","state":"MN"}, +{"id":192,"firstName":"Cull","lastName":"Whiterod","street":"2586 Banding Terrace","postalCode":"80249","city":"Denver","state":"CO","email":"cwhiterod5b@skype.com"}, +{"id":193,"firstName":"Gretel","lastName":"Tacey","street":"6382 Fremont Avenue","postalCode":"25305","city":"Charleston","state":"WV"}, +{"id":194,"firstName":"Tudor","lastName":"Piff","street":"0 Monterey Circle","postalCode":"00214","city":"Portsmouth","state":"NH","email":"tpiff5d@eepurl.com"}, +{"id":195,"firstName":"Julienne","lastName":"Adshed","street":"91839 Lawn Avenue","postalCode":"92519","city":"Riverside","state":"CA"}, +{"id":196,"firstName":"Arnold","lastName":"Fearns","street":"7 West Trail","postalCode":"35242","city":"Birmingham","state":"AL","email":"afearns5f@bravesites.com"}, +{"id":197,"firstName":"Dunc","lastName":"Khoter","street":"048 Clove Lane","postalCode":"89505","city":"Reno","state":"NV","phoneNumber":"775-120-9532","email":"dkhoter5g@bbb.org"}, +{"id":198,"firstName":"Stevana","lastName":"Lush","street":"6 Dovetail Plaza","postalCode":"79945","city":"El Paso","state":"TX","email":"slush5h@economist.com"}, +{"id":199,"firstName":"Iggy","lastName":"Verryan","street":"5 Sommers Road","postalCode":"34114","city":"Naples","state":"FL","phoneNumber":"239-205-8767"}, +{"id":200,"firstName":"Breena","lastName":"Rubbert","street":"5 Kensington Crossing","postalCode":"90510","city":"Torrance","state":"CA","email":"brubbert5j@phpbb.com"}, +{"id":201,"firstName":"Jervis","lastName":"Doree","street":"2947 Center Plaza","postalCode":"70160","city":"New Orleans","state":"LA","phoneNumber":"504-278-7497","email":"jdoree5k@shutterfly.com"}, +{"id":202,"firstName":"Odelia","lastName":"Lidierth","street":"36699 Aberg Park","postalCode":"62764","city":"Springfield","state":"IL"}, +{"id":203,"firstName":"Ree","lastName":"Lammerding","street":"3542 Lerdahl Court","postalCode":"88558","city":"El Paso","state":"TX","phoneNumber":"915-384-9334","email":"rlammerding5m@msu.edu"}, +{"id":204,"firstName":"Davy","lastName":"Orniz","street":"49 Graedel Parkway","postalCode":"48295","city":"Detroit","state":"MI","email":"dorniz5n@examiner.com"}, +{"id":205,"firstName":"Syd","lastName":"Buckoke","street":"70 Pepper Wood Alley","postalCode":"74156","city":"Tulsa","state":"OK","phoneNumber":"918-604-5799"}, +{"id":206,"firstName":"Ginger","lastName":"Calkin","street":"7 Thompson Trail","postalCode":"71115","city":"Shreveport","state":"LA","phoneNumber":"318-650-6046"}, +{"id":207,"firstName":"Anissa","lastName":"Ivashinnikov","street":"61905 Chive Circle","postalCode":"40745","city":"London","state":"KY","email":"aivashinnikov5q@google.cn"}, +{"id":208,"firstName":"Vikky","lastName":"Kesley","street":"1 Grayhawk Street","postalCode":"06538","city":"New Haven","state":"CT","phoneNumber":"203-944-7163"}, +{"id":209,"firstName":"Alisha","lastName":"Lampke","street":"26940 Kensington Park","postalCode":"55446","city":"Minneapolis","state":"MN","phoneNumber":"612-814-9814","email":"alampke5s@apple.com"}, +{"id":210,"firstName":"Davidde","lastName":"Phlipon","street":"2044 Ruskin Road","postalCode":"07188","city":"Newark","state":"NJ","email":"dphlipon5t@shareasale.com"}, +{"id":211,"firstName":"Joly","lastName":"Crottagh","street":"532 Dawn Plaza","postalCode":"85083","city":"Phoenix","state":"AZ","phoneNumber":"602-533-4064"}, +{"id":212,"firstName":"Aggie","lastName":"Niesing","street":"3 Tony Drive","postalCode":"57110","city":"Sioux Falls","state":"SD","email":"aniesing5v@pbs.org"}, +{"id":213,"firstName":"Daron","lastName":"Baudassi","street":"2411 Melvin Court","postalCode":"40581","city":"Lexington","state":"KY","phoneNumber":"859-754-2542","email":"dbaudassi5w@joomla.org"}, +{"id":214,"firstName":"Thadeus","lastName":"Kleiser","street":"1394 Warner Street","postalCode":"87592","city":"Santa Fe","state":"NM","email":"tkleiser5x@bloomberg.com"}, +{"id":215,"firstName":"Terri","lastName":"Perrat","street":"0080 Upham Plaza","postalCode":"52245","city":"Iowa City","state":"IA"}, +{"id":216,"firstName":"Marlena","lastName":"Gatchell","street":"60888 Annamark Street","postalCode":"90060","city":"Los Angeles","state":"CA","phoneNumber":"323-121-6985","email":"mgatchell5z@ibm.com"}, +{"id":217,"firstName":"Locke","lastName":"Orcott","street":"459 Warner Lane","postalCode":"45020","city":"Hamilton","state":"OH","phoneNumber":"937-115-3187"}, +{"id":218,"firstName":"Wilmer","lastName":"Bewick","street":"0 Ohio Center","postalCode":"98166","city":"Seattle","state":"WA","phoneNumber":"253-805-8855","email":"wbewick61@seesaa.net"}, +{"id":219,"firstName":"Marena","lastName":"MacShirrie","street":"607 Badeau Circle","postalCode":"98008","city":"Bellevue","state":"WA","email":"mmacshirrie62@wikia.com"}, +{"id":220,"firstName":"Nathanial","lastName":"Sexty","street":"43 Basil Place","postalCode":"85020","city":"Phoenix","state":"AZ"}, +{"id":221,"firstName":"Wadsworth","lastName":"Iacovuzzi","street":"9610 Donald Crossing","postalCode":"88530","city":"El Paso","state":"TX","phoneNumber":"915-889-7936","email":"wiacovuzzi64@prnewswire.com"}, +{"id":222,"firstName":"Sutton","lastName":"Stych","street":"9 Brentwood Terrace","postalCode":"20546","city":"Washington","state":"DC","phoneNumber":"202-538-6355","email":"sstych65@wikimedia.org"}, +{"id":223,"firstName":"Gaspar","lastName":"Wabey","street":"3061 Bluejay Terrace","postalCode":"10110","city":"New York City","state":"NY","phoneNumber":"917-939-0802","email":"gwabey66@technorati.com"}, +{"id":224,"firstName":"Herminia","lastName":"Guyot","street":"91 Express Drive","postalCode":"85715","city":"Tucson","state":"AZ","phoneNumber":"520-777-1670","email":"hguyot67@admin.ch"}, +{"id":225,"firstName":"Udale","lastName":"Beurich","street":"675 Karstens Crossing","postalCode":"46852","city":"Fort Wayne","state":"IN","phoneNumber":"260-580-8627","email":"ubeurich68@bigcartel.com"}, +{"id":226,"firstName":"Kerrie","lastName":"Girauld","street":"56132 Charing Cross Court","postalCode":"71137","city":"Shreveport","state":"LA","email":"kgirauld69@nationalgeographic.com"}, +{"id":227,"firstName":"Irvin","lastName":"Nix","street":"0676 Aberg Terrace","postalCode":"97075","city":"Beaverton","state":"OR","email":"inix6a@xing.com"}, +{"id":228,"firstName":"Corene","lastName":"Spencock","street":"90 Meadow Ridge Drive","postalCode":"73173","city":"Oklahoma City","state":"OK","phoneNumber":"405-577-1312","email":"cspencock6b@shinystat.com"}, +{"id":229,"firstName":"Christos","lastName":"McIlreavy","street":"673 Jana Trail","postalCode":"23471","city":"Virginia Beach","state":"VA","email":"cmcilreavy6c@mayoclinic.com"}, +{"id":230,"firstName":"Bennett","lastName":"Melding","street":"4 Cardinal Lane","postalCode":"55448","city":"Minneapolis","state":"MN","email":"bmelding6d@t-online.de"}, +{"id":231,"firstName":"Winny","lastName":"de Leon","street":"941 Scoville Place","postalCode":"94611","city":"Oakland","state":"CA","phoneNumber":"510-230-4168","email":"wdeleon6e@dell.com"}, +{"id":232,"firstName":"Nike","lastName":"Iacobassi","street":"956 Service Junction","postalCode":"71914","city":"Hot Springs National Park","state":"AR","phoneNumber":"501-266-4142"}, +{"id":233,"firstName":"Gillan","lastName":"Baumann","street":"11 8th Alley","postalCode":"31190","city":"Atlanta","state":"GA","phoneNumber":"404-703-5154","email":"gbaumann6g@edublogs.org"}, +{"id":234,"firstName":"Brandtr","lastName":"Gadman","street":"5 Marquette Hill","postalCode":"32511","city":"Pensacola","state":"FL","phoneNumber":"850-834-0058","email":"bgadman6h@marriott.com"}, +{"id":235,"firstName":"Kenn","lastName":"Cage","street":"3759 Spohn Point","postalCode":"94126","city":"San Francisco","state":"CA","email":"kcage6i@earthlink.net"}, +{"id":236,"firstName":"Butch","lastName":"Causby","street":"02 Basil Crossing","postalCode":"10110","city":"New York City","state":"NY","phoneNumber":"212-190-1702","email":"bcausby6j@scribd.com"}, +{"id":237,"firstName":"Haleigh","lastName":"Parsonson","street":"8 Ruskin Trail","postalCode":"87201","city":"Albuquerque","state":"NM","phoneNumber":"505-987-1352"}, +{"id":238,"firstName":"Bartel","lastName":"Ruppeli","street":"7538 Red Cloud Center","postalCode":"37410","city":"Chattanooga","state":"TN","phoneNumber":"423-804-1016","email":"bruppeli6l@etsy.com"}, +{"id":239,"firstName":"Gretchen","lastName":"Le feaver","street":"7 Orin Way","postalCode":"98042","city":"Kent","state":"WA","phoneNumber":"253-205-3092","email":"glefeaver6m@mayoclinic.com"}, +{"id":240,"firstName":"Trumaine","lastName":"Dearden","street":"1 Vernon Trail","postalCode":"06127","city":"West Hartford","state":"CT","phoneNumber":"860-939-3865","email":"tdearden6n@goo.gl"}, +{"id":241,"firstName":"Aggie","lastName":"Dubs","street":"3601 Walton Trail","postalCode":"62764","city":"Springfield","state":"IL","phoneNumber":"217-834-6059","email":"adubs6o@cbsnews.com"}, +{"id":242,"firstName":"Shelly","lastName":"Skechley","street":"16 Morning Lane","postalCode":"60567","city":"Naperville","state":"IL","email":"sskechley6p@technorati.com"}, +{"id":243,"firstName":"Karin","lastName":"Fausch","street":"7532 Eggendart Way","postalCode":"19810","city":"Wilmington","state":"DE","phoneNumber":"302-548-2991"}, +{"id":244,"firstName":"Sal","lastName":"Harrow","street":"2632 Lien Way","postalCode":"33982","city":"Punta Gorda","state":"FL","phoneNumber":"941-904-5187","email":"sharrow6r@joomla.org"}, +{"id":245,"firstName":"Albie","lastName":"Strelitzki","street":"8436 Eggendart Terrace","postalCode":"49505","city":"Grand Rapids","state":"MI","email":"astrelitzki6s@google.com.br"}, +{"id":246,"firstName":"Augy","lastName":"Usherwood","street":"9078 Clemons Street","postalCode":"80915","city":"Colorado Springs","state":"CO","email":"ausherwood6t@wikimedia.org"}, +{"id":247,"firstName":"Solomon","lastName":"D'eathe","street":"778 Rockefeller Parkway","postalCode":"84199","city":"Salt Lake City","state":"UT"}, +{"id":248,"firstName":"Talya","lastName":"Joseff","street":"14 Graedel Court","postalCode":"99220","city":"Spokane","state":"WA","email":"tjoseff6v@amazon.de"}, +{"id":249,"firstName":"Anatol","lastName":"Self","street":"2 Stoughton Junction","postalCode":"85255","city":"Scottsdale","state":"AZ"}, +{"id":250,"firstName":"Elinore","lastName":"Bruhnke","street":"3 Bashford Alley","postalCode":"17105","city":"Harrisburg","state":"PA","email":"ebruhnke6x@usnews.com"}, +{"id":251,"firstName":"Stanfield","lastName":"Jagiello","street":"0804 Amoth Road","postalCode":"20067","city":"Washington","state":"DC"}, +{"id":252,"firstName":"Isak","lastName":"Venour","street":"04 Orin Court","postalCode":"78210","city":"San Antonio","state":"TX","email":"ivenour6z@springer.com"}, +{"id":253,"firstName":"Abigale","lastName":"Woolgar","street":"74 Porter Terrace","postalCode":"62705","city":"Springfield","state":"IL"}, +{"id":254,"firstName":"Phylys","lastName":"Casperri","street":"07 Delaware Street","postalCode":"33069","city":"Pompano Beach","state":"FL","phoneNumber":"954-224-4577"}, +{"id":255,"firstName":"Melania","lastName":"Fee","street":"194 Luster Point","postalCode":"70154","city":"New Orleans","state":"LA","phoneNumber":"504-168-6959","email":"mfee72@comsenz.com"}, +{"id":256,"firstName":"Joli","lastName":"Colquite","street":"9 Bayside Court","postalCode":"27425","city":"Greensboro","state":"NC","email":"jcolquite73@comcast.net"}, +{"id":257,"firstName":"Rahel","lastName":"Late","street":"2 Meadow Ridge Alley","postalCode":"32204","city":"Jacksonville","state":"FL"}, +{"id":258,"firstName":"Carny","lastName":"Fewell","street":"21826 Cardinal Pass","postalCode":"98140","city":"Seattle","state":"WA"}, +{"id":259,"firstName":"Lesly","lastName":"Vanyatin","street":"7730 South Court","postalCode":"25356","city":"Charleston","state":"WV","email":"lvanyatin76@histats.com"}, +{"id":260,"firstName":"Fianna","lastName":"Thomason","street":"2576 Holmberg Trail","postalCode":"27710","city":"Durham","state":"NC"}, +{"id":261,"firstName":"Bobinette","lastName":"Gowdridge","street":"6780 Superior Place","postalCode":"37605","city":"Johnson City","state":"TN","phoneNumber":"423-490-4990","email":"bgowdridge78@icio.us"}, +{"id":262,"firstName":"Karmen","lastName":"Megson","street":"34 Messerschmidt Point","postalCode":"97229","city":"Portland","state":"OR","email":"kmegson79@apache.org"}, +{"id":263,"firstName":"Thaddeus","lastName":"Padilla","street":"42 Corben Road","postalCode":"90010","city":"Los Angeles","state":"CA","phoneNumber":"213-659-3136","email":"tpadilla7a@hud.gov"}, +{"id":264,"firstName":"Hanna","lastName":"Baswall","street":"9 Old Shore Lane","postalCode":"53710","city":"Madison","state":"WI","email":"hbaswall7b@ezinearticles.com"}, +{"id":265,"firstName":"Tania","lastName":"McMorland","street":"4333 Commercial Point","postalCode":"45408","city":"Dayton","state":"OH"}, +{"id":266,"firstName":"Gifford","lastName":"Arne","street":"0 Drewry Point","postalCode":"24048","city":"Roanoke","state":"VA","email":"garne7d@samsung.com"}, +{"id":267,"firstName":"Tomasina","lastName":"Linch","street":"64992 Maple Wood Point","postalCode":"98447","city":"Tacoma","state":"WA","email":"tlinch7e@theglobeandmail.com"}, +{"id":268,"firstName":"Merrick","lastName":"Garvan","street":"7220 Melody Trail","postalCode":"90005","city":"Los Angeles","state":"CA","email":"mgarvan7f@mozilla.org"}, +{"id":269,"firstName":"Carmita","lastName":"Sailes","street":"3 Bay Lane","postalCode":"55428","city":"Minneapolis","state":"MN","email":"csailes7g@devhub.com"}, +{"id":270,"firstName":"Lesly","lastName":"Eslemont","street":"93302 Mcbride Terrace","postalCode":"19810","city":"Wilmington","state":"DE","email":"leslemont7h@wunderground.com"}, +{"id":271,"firstName":"Adelaida","lastName":"Keggins","street":"4 Birchwood Pass","postalCode":"97405","city":"Eugene","state":"OR","phoneNumber":"541-387-1319"}, +{"id":272,"firstName":"Peadar","lastName":"Forte","street":"1 Montana Center","postalCode":"32505","city":"Pensacola","state":"FL","email":"pforte7j@xing.com"}, +{"id":273,"firstName":"Godfrey","lastName":"Swatland","street":"477 Maple Wood Road","postalCode":"93034","city":"Oxnard","state":"CA","phoneNumber":"805-267-0614","email":"gswatland7k@photobucket.com"}, +{"id":274,"firstName":"Marten","lastName":"Jelleman","street":"57 Pennsylvania Plaza","postalCode":"20057","city":"Washington","state":"DC","email":"mjelleman7l@phoca.cz"}, +{"id":275,"firstName":"Sharity","lastName":"Keady","street":"753 Sauthoff Place","postalCode":"77505","city":"Pasadena","state":"TX"}, +{"id":276,"firstName":"Gabbie","lastName":"Pally","street":"45 Fallview Park","postalCode":"97255","city":"Portland","state":"OR","phoneNumber":"971-412-2293","email":"gpally7n@dyndns.org"}, +{"id":277,"firstName":"Betsy","lastName":"Rhelton","street":"9 Jackson Road","postalCode":"85040","city":"Phoenix","state":"AZ"}, +{"id":278,"firstName":"Patty","lastName":"Schooling","street":"4 Moulton Point","postalCode":"25705","city":"Huntington","state":"WV","phoneNumber":"304-908-8211","email":"pschooling7p@parallels.com"}, +{"id":279,"firstName":"Katlin","lastName":"O'Hallagan","street":"8418 Petterle Plaza","postalCode":"60636","city":"Chicago","state":"IL","email":"kohallagan7q@hao123.com"}, +{"id":280,"firstName":"Anne","lastName":"Wealleans","street":"3 Sachtjen Court","postalCode":"48609","city":"Saginaw","state":"MI"}, +{"id":281,"firstName":"Flory","lastName":"Pley","street":"6322 Golf View Court","postalCode":"19104","city":"Philadelphia","state":"PA"}, +{"id":282,"firstName":"Maryellen","lastName":"Baszkiewicz","street":"54165 Hanson Trail","postalCode":"93726","city":"Fresno","state":"CA","phoneNumber":"209-198-4916","email":"mbaszkiewicz7t@google.com.br"}, +{"id":283,"firstName":"Moyna","lastName":"Caddens","street":"17 Melrose Lane","postalCode":"11236","city":"Brooklyn","state":"NY","phoneNumber":"917-518-3987","email":"mcaddens7u@amazon.co.uk"}, +{"id":284,"firstName":"Lawton","lastName":"Ramiro","street":"2 Muir Park","postalCode":"48092","city":"Warren","state":"MI","phoneNumber":"810-472-5208","email":"lramiro7v@senate.gov"}, +{"id":285,"firstName":"Agnella","lastName":"Phelip","street":"24566 Colorado Pass","postalCode":"84145","city":"Salt Lake City","state":"UT","phoneNumber":"801-709-8696","email":"aphelip7w@woothemes.com"}, +{"id":286,"firstName":"Tracee","lastName":"Tighe","street":"41013 Cascade Lane","postalCode":"02142","city":"Cambridge","state":"MA"}, +{"id":287,"firstName":"Shelden","lastName":"Sowrey","street":"87 Glacier Hill Court","postalCode":"55557","city":"Young America","state":"MN","email":"ssowrey7y@sfgate.com"}, +{"id":288,"firstName":"Letizia","lastName":"Sallery","street":"65052 Shasta Court","postalCode":"44905","city":"Mansfield","state":"OH","phoneNumber":"419-752-9141"}, +{"id":289,"firstName":"Hilly","lastName":"Oyley","street":"7 Waywood Trail","postalCode":"30323","city":"Atlanta","state":"GA","email":"hoyley80@upenn.edu"}, +{"id":290,"firstName":"Sabra","lastName":"Grigoryev","street":"856 Michigan Trail","postalCode":"33705","city":"Saint Petersburg","state":"FL"}, +{"id":291,"firstName":"Nathanil","lastName":"Bodham","street":"536 Ridgeview Way","postalCode":"79984","city":"El Paso","state":"TX","email":"nbodham82@wikimedia.org"}, +{"id":292,"firstName":"Niven","lastName":"Hartzenberg","street":"5 Carpenter Hill","postalCode":"73167","city":"Oklahoma City","state":"OK","email":"nhartzenberg83@bandcamp.com"}, +{"id":293,"firstName":"Rachael","lastName":"Birdsall","street":"61484 Mendota Point","postalCode":"90410","city":"Santa Monica","state":"CA","email":"rbirdsall84@gmpg.org"}, +{"id":294,"firstName":"Gypsy","lastName":"Rallin","street":"4 Spohn Drive","postalCode":"77346","city":"Humble","state":"TX","phoneNumber":"713-508-2912","email":"grallin85@privacy.gov.au"}, +{"id":295,"firstName":"Skye","lastName":"Arsey","street":"49126 Maryland Lane","postalCode":"02119","city":"Boston","state":"MA"}, +{"id":296,"firstName":"Karalee","lastName":"Biddiss","street":"0327 Coleman Lane","postalCode":"10203","city":"New York City","state":"NY","email":"kbiddiss87@studiopress.com"}, +{"id":297,"firstName":"Russ","lastName":"O' Mahony","street":"7831 Caliangt Avenue","postalCode":"37665","city":"Kingsport","state":"TN","phoneNumber":"423-292-1177","email":"romahony88@umich.edu"}, +{"id":298,"firstName":"Gerianne","lastName":"Morfey","street":"1 Jay Hill","postalCode":"97229","city":"Portland","state":"OR","email":"gmorfey89@techcrunch.com"}, +{"id":299,"firstName":"Griz","lastName":"Vellacott","street":"44 Parkside Court","postalCode":"64149","city":"Kansas City","state":"MO","phoneNumber":"816-120-1692"}, +{"id":300,"firstName":"Parker","lastName":"Mantz","street":"3 Arkansas Lane","postalCode":"90005","city":"Los Angeles","state":"CA","email":"pmantz8b@va.gov"}, +{"id":301,"firstName":"Drugi","lastName":"Acaster","street":"426 Hagan Park","postalCode":"20599","city":"Washington","state":"DC","email":"dacaster8c@ihg.com"}, +{"id":302,"firstName":"Peder","lastName":"Monget","street":"9 Wayridge Parkway","postalCode":"92862","city":"Orange","state":"CA","phoneNumber":"714-532-0867","email":"pmonget8d@biblegateway.com"}, +{"id":303,"firstName":"Zilvia","lastName":"Grocutt","street":"1 Stuart Circle","postalCode":"34642","city":"Seminole","state":"FL"}, +{"id":304,"firstName":"Clyve","lastName":"Gunby","street":"75 Dunning Junction","postalCode":"79977","city":"El Paso","state":"TX","email":"cgunby8f@microsoft.com"}, +{"id":305,"firstName":"Zacharias","lastName":"Tomasini","street":"48488 Thackeray Way","postalCode":"40210","city":"Louisville","state":"KY","email":"ztomasini8g@harvard.edu"}, +{"id":306,"firstName":"Ferdinand","lastName":"McGuinley","street":"30366 Kipling Drive","postalCode":"23208","city":"Richmond","state":"VA","email":"fmcguinley8h@archive.org"}, +{"id":307,"firstName":"Ebonee","lastName":"Brumfitt","street":"18765 Division Terrace","postalCode":"30033","city":"Decatur","state":"GA","phoneNumber":"404-684-8364","email":"ebrumfitt8i@sourceforge.net"}, +{"id":308,"firstName":"Christy","lastName":"Cuniam","street":"6 Homewood Road","postalCode":"78744","city":"Austin","state":"TX","phoneNumber":"361-677-9833","email":"ccuniam8j@51.la"}, +{"id":309,"firstName":"Emelen","lastName":"Casin","street":"91 Thompson Plaza","postalCode":"33954","city":"Port Charlotte","state":"FL","email":"ecasin8k@webnode.com"}, +{"id":310,"firstName":"Babara","lastName":"Robberecht","street":"603 Oak Terrace","postalCode":"37450","city":"Chattanooga","state":"TN","email":"brobberecht8l@cargocollective.com"}, +{"id":311,"firstName":"Cesar","lastName":"Whitecross","street":"024 Oxford Junction","postalCode":"20226","city":"Washington","state":"DC","phoneNumber":"202-772-2936"}, +{"id":312,"firstName":"Frieda","lastName":"Sliman","street":"4 Beilfuss Hill","postalCode":"23324","city":"Chesapeake","state":"VA","email":"fsliman8n@bigcartel.com"}, +{"id":313,"firstName":"Dylan","lastName":"Paige","street":"26 Gina Parkway","postalCode":"55448","city":"Minneapolis","state":"MN","email":"dpaige8o@trellian.com"}, +{"id":314,"firstName":"Waring","lastName":"Labon","street":"2843 Spenser Center","postalCode":"49444","city":"Muskegon","state":"MI","phoneNumber":"231-274-0766","email":"wlabon8p@ucla.edu"}, +{"id":315,"firstName":"Conny","lastName":"Duinkerk","street":"65 Lunder Circle","postalCode":"45426","city":"Dayton","state":"OH","email":"cduinkerk8q@economist.com"}, +{"id":316,"firstName":"Nessie","lastName":"Stucksbury","street":"91449 Browning Drive","postalCode":"25705","city":"Huntington","state":"WV","phoneNumber":"304-182-0766"}, +{"id":317,"firstName":"Corrine","lastName":"Kohlert","street":"00706 Carioca Plaza","postalCode":"45223","city":"Cincinnati","state":"OH","email":"ckohlert8s@wunderground.com"}, +{"id":318,"firstName":"Horatio","lastName":"Greengrass","street":"0 Cascade Park","postalCode":"79905","city":"El Paso","state":"TX","email":"hgreengrass8t@ameblo.jp"}, +{"id":319,"firstName":"Jana","lastName":"McLae","street":"919 Esch Place","postalCode":"55428","city":"Minneapolis","state":"MN","email":"jmclae8u@nytimes.com"}, +{"id":320,"firstName":"Maressa","lastName":"Rehor","street":"55 Talisman Junction","postalCode":"90505","city":"Torrance","state":"CA","email":"mrehor8v@vinaora.com"}, +{"id":321,"firstName":"Filide","lastName":"Riehm","street":"0 Karstens Lane","postalCode":"95054","city":"Santa Clara","state":"CA"}, +{"id":322,"firstName":"Bunnie","lastName":"Mumbey","street":"9369 Bayside Circle","postalCode":"46216","city":"Indianapolis","state":"IN","email":"bmumbey8x@scribd.com"}, +{"id":323,"firstName":"Maxi","lastName":"Jentgens","street":"2970 Rowland Circle","postalCode":"84189","city":"Salt Lake City","state":"UT","phoneNumber":"801-423-8854","email":"mjentgens8y@ihg.com"}, +{"id":324,"firstName":"Florri","lastName":"Okenden","street":"2180 Cody Point","postalCode":"70187","city":"New Orleans","state":"LA","phoneNumber":"504-913-1989","email":"fokenden8z@networksolutions.com"}, +{"id":325,"firstName":"Imogen","lastName":"Grisard","street":"8 Westerfield Avenue","postalCode":"92668","city":"Orange","state":"CA","email":"igrisard90@tamu.edu"}, +{"id":326,"firstName":"Edwina","lastName":"Montes","street":"92 Carpenter Avenue","postalCode":"97216","city":"Portland","state":"OR","phoneNumber":"503-544-7296","email":"emontes91@reference.com"}, +{"id":327,"firstName":"Renelle","lastName":"MacCambridge","street":"77 Talmadge Circle","postalCode":"08638","city":"Trenton","state":"NJ","phoneNumber":"609-150-9438","email":"rmaccambridge92@springer.com"}, +{"id":328,"firstName":"Sterne","lastName":"Taberner","street":"642 6th Terrace","postalCode":"10120","city":"New York City","state":"NY","email":"staberner93@miibeian.gov.cn"}, +{"id":329,"firstName":"Garvy","lastName":"Pankethman","street":"8618 Kennedy Terrace","postalCode":"79405","city":"Lubbock","state":"TX","phoneNumber":"806-470-8784","email":"gpankethman94@free.fr"}, +{"id":330,"firstName":"Nathanil","lastName":"Holston","street":"27247 Eliot Avenue","postalCode":"31190","city":"Atlanta","state":"GA","email":"nholston95@drupal.org"}, +{"id":331,"firstName":"Caresse","lastName":"Kilty","street":"514 Manufacturers Pass","postalCode":"76205","city":"Denton","state":"TX","email":"ckilty96@umich.edu"}, +{"id":332,"firstName":"Arlinda","lastName":"Brenstuhl","street":"2 Sunnyside Avenue","postalCode":"55470","city":"Minneapolis","state":"MN","email":"abrenstuhl97@wisc.edu"}, +{"id":333,"firstName":"Darcy","lastName":"Dunne","street":"3 Badeau Park","postalCode":"91328","city":"Northridge","state":"CA"}, +{"id":334,"firstName":"Malva","lastName":"Grew","street":"2242 Huxley Hill","postalCode":"68510","city":"Lincoln","state":"NE","email":"mgrew99@com.com"}, +{"id":335,"firstName":"Sukey","lastName":"Winspur","street":"475 Melvin Way","postalCode":"68524","city":"Lincoln","state":"NE","phoneNumber":"402-816-9401"}, +{"id":336,"firstName":"Beth","lastName":"O'Dougherty","street":"450 Eastlawn Park","postalCode":"93591","city":"Palmdale","state":"CA","phoneNumber":"661-845-8781"}, +{"id":337,"firstName":"Cortney","lastName":"Meers","street":"9 Chive Drive","postalCode":"93762","city":"Fresno","state":"CA","email":"cmeers9c@diigo.com"}, +{"id":338,"firstName":"Geralda","lastName":"Brocket","street":"0686 La Follette Avenue","postalCode":"80126","city":"Littleton","state":"CO","phoneNumber":"720-641-1371","email":"gbrocket9d@youku.com"}, +{"id":339,"firstName":"Lishe","lastName":"Maliphant","street":"5 Erie Plaza","postalCode":"63169","city":"Saint Louis","state":"MO","email":"lmaliphant9e@sfgate.com"}, +{"id":340,"firstName":"Brod","lastName":"Dobrovsky","street":"9 Gateway Park","postalCode":"79405","city":"Lubbock","state":"TX"}, +{"id":341,"firstName":"Philippe","lastName":"Argile","street":"4 Red Cloud Plaza","postalCode":"49444","city":"Muskegon","state":"MI","phoneNumber":"231-633-5495"}, +{"id":342,"firstName":"Sadye","lastName":"Sally","street":"07 Mendota Terrace","postalCode":"75507","city":"Texarkana","state":"TX","email":"ssally9h@e-recht24.de"}, +{"id":343,"firstName":"Napoleon","lastName":"Piggott","street":"3968 Roxbury Point","postalCode":"35905","city":"Gadsden","state":"AL","email":"npiggott9i@cnbc.com"}, +{"id":344,"firstName":"Jere","lastName":"Larn","street":"5086 Dahle Crossing","postalCode":"39534","city":"Biloxi","state":"MS","email":"jlarn9j@twitter.com"}, +{"id":345,"firstName":"Bevon","lastName":"Stidson","street":"7 Armistice Court","postalCode":"23436","city":"Suffolk","state":"VA","email":"bstidson9k@alexa.com"}, +{"id":346,"firstName":"Drugi","lastName":"Ewbach","street":"6032 5th Avenue","postalCode":"02208","city":"Boston","state":"MA","email":"dewbach9l@techcrunch.com"}, +{"id":347,"firstName":"Milka","lastName":"Caizley","street":"7 Anderson Junction","postalCode":"37228","city":"Nashville","state":"TN","phoneNumber":"615-305-6985","email":"mcaizley9m@cyberchimps.com"}, +{"id":348,"firstName":"Wilton","lastName":"Biagi","street":"80833 6th Crossing","postalCode":"40215","city":"Louisville","state":"KY","email":"wbiagi9n@vinaora.com"}, +{"id":349,"firstName":"Dilly","lastName":"Spradbrow","street":"5 Harbort Street","postalCode":"45419","city":"Dayton","state":"OH","email":"dspradbrow9o@marketwatch.com"}, +{"id":350,"firstName":"Gan","lastName":"Gookey","street":"8387 Bultman Terrace","postalCode":"75241","city":"Dallas","state":"TX"}, +{"id":351,"firstName":"Nanon","lastName":"Mulrenan","street":"47257 Reindahl Drive","postalCode":"22119","city":"Merrifield","state":"VA","phoneNumber":"571-637-8154","email":"nmulrenan9q@godaddy.com"}, +{"id":352,"firstName":"Frederique","lastName":"Watkiss","street":"61 Heath Pass","postalCode":"70124","city":"New Orleans","state":"LA","phoneNumber":"504-891-7051"}, +{"id":353,"firstName":"Sinclare","lastName":"MacCurlye","street":"514 Meadow Ridge Place","postalCode":"97240","city":"Portland","state":"OR","phoneNumber":"971-190-5174","email":"smaccurlye9s@google.ru"}, +{"id":354,"firstName":"Jessie","lastName":"Newlands","street":"80509 Northland Pass","postalCode":"33111","city":"Miami","state":"FL","phoneNumber":"786-557-9193"}, +{"id":355,"firstName":"Jamaal","lastName":"Molder","street":"90 Mcbride Trail","postalCode":"78764","city":"Austin","state":"TX","phoneNumber":"512-320-8728"}, +{"id":356,"firstName":"Benni","lastName":"Sherel","street":"7 Springs Road","postalCode":"15235","city":"Pittsburgh","state":"PA","email":"bsherel9v@hostgator.com"}, +{"id":357,"firstName":"Dene","lastName":"Brigge","street":"8560 Sutteridge Parkway","postalCode":"32412","city":"Panama City","state":"FL"}, +{"id":358,"firstName":"Timoteo","lastName":"Iban","street":"52858 Oak Valley Hill","postalCode":"93750","city":"Fresno","state":"CA","email":"tiban9x@europa.eu"}, +{"id":359,"firstName":"Dar","lastName":"Quillinane","street":"2 Carberry Junction","postalCode":"66276","city":"Shawnee Mission","state":"KS","phoneNumber":"913-977-7562","email":"dquillinane9y@msn.com"}, +{"id":360,"firstName":"Claudian","lastName":"Tinson","street":"445 Novick Avenue","postalCode":"79968","city":"El Paso","state":"TX","email":"ctinson9z@google.cn"}, +{"id":361,"firstName":"Clarice","lastName":"Deneve","street":"94 Meadow Ridge Road","postalCode":"37131","city":"Murfreesboro","state":"TN","phoneNumber":"615-780-7667"}, +{"id":362,"firstName":"Hilary","lastName":"Bithell","street":"20 Russell Trail","postalCode":"81010","city":"Pueblo","state":"CO","email":"hbithella1@list-manage.com"}, +{"id":363,"firstName":"Mathew","lastName":"Scrivin","street":"4 Elgar Point","postalCode":"90081","city":"Los Angeles","state":"CA","phoneNumber":"213-898-6650","email":"mscrivina2@about.me"}, +{"id":364,"firstName":"Idell","lastName":"Rambadt","street":"6 Cherokee Hill","postalCode":"90840","city":"Long Beach","state":"CA","email":"irambadta3@ustream.tv"}, +{"id":365,"firstName":"Nealon","lastName":"Schoolfield","street":"1 Northland Point","postalCode":"74133","city":"Tulsa","state":"OK"}, +{"id":366,"firstName":"Gregorius","lastName":"Bartot","street":"24636 Eagle Crest Crossing","postalCode":"32215","city":"Jacksonville","state":"FL","email":"gbartota5@blogger.com"}, +{"id":367,"firstName":"Inessa","lastName":"Hullin","street":"559 Bartillon Trail","postalCode":"33142","city":"Miami","state":"FL","phoneNumber":"305-381-6621","email":"ihullina6@pcworld.com"}, +{"id":368,"firstName":"Andie","lastName":"Bampford","street":"5204 Meadow Valley Street","postalCode":"92825","city":"Anaheim","state":"CA","email":"abampforda7@sun.com"}, +{"id":369,"firstName":"Duane","lastName":"MacShirrie","street":"5077 Kings Parkway","postalCode":"92725","city":"Santa Ana","state":"CA","email":"dmacshirriea8@rambler.ru"}, +{"id":370,"firstName":"Sydel","lastName":"Deerr","street":"1 Commercial Road","postalCode":"30356","city":"Atlanta","state":"GA","phoneNumber":"404-209-0194","email":"sdeerra9@phpbb.com"}, +{"id":371,"firstName":"Mel","lastName":"Miles","street":"28164 Melody Plaza","postalCode":"90847","city":"Long Beach","state":"CA","phoneNumber":"562-932-1172"}, +{"id":372,"firstName":"Jone","lastName":"Drinkel","street":"946 Reindahl Point","postalCode":"48604","city":"Saginaw","state":"MI","phoneNumber":"989-547-0653"}, +{"id":373,"firstName":"Marcellus","lastName":"MacGilmartin","street":"10568 Westerfield Way","postalCode":"32868","city":"Orlando","state":"FL","phoneNumber":"407-874-6188","email":"mmacgilmartinac@fotki.com"}, +{"id":374,"firstName":"Bret","lastName":"Hardan","street":"9 Hayes Crossing","postalCode":"32309","city":"Tallahassee","state":"FL","email":"bhardanad@mit.edu"}, +{"id":375,"firstName":"Heddie","lastName":"Cesaric","street":"502 Cody Crossing","postalCode":"95397","city":"Modesto","state":"CA"}, +{"id":376,"firstName":"Tansy","lastName":"Maeer","street":"526 Messerschmidt Court","postalCode":"94089","city":"Sunnyvale","state":"CA","email":"tmaeeraf@arizona.edu"}, +{"id":377,"firstName":"Waverly","lastName":"West-Frimley","street":"02 Quincy Trail","postalCode":"20575","city":"Washington","state":"DC","phoneNumber":"202-493-3304","email":"wwestfrimleyag@ft.com"}, +{"id":378,"firstName":"Dido","lastName":"de Clercq","street":"7 Norway Maple Center","postalCode":"84125","city":"Salt Lake City","state":"UT","email":"ddeclercqah@trellian.com"}, +{"id":379,"firstName":"Vic","lastName":"Samuels","street":"2 Kipling Drive","postalCode":"31190","city":"Atlanta","state":"GA","email":"vsamuelsai@goo.gl"}, +{"id":380,"firstName":"Jeno","lastName":"Freiburger","street":"431 Golden Leaf Parkway","postalCode":"32610","city":"Gainesville","state":"FL","email":"jfreiburgeraj@theguardian.com"}, +{"id":381,"firstName":"Christine","lastName":"Basketter","street":"4 Lotheville Terrace","postalCode":"39305","city":"Meridian","state":"MS","phoneNumber":"601-702-1546"}, +{"id":382,"firstName":"Karry","lastName":"Corsan","street":"09189 Lakeland Point","postalCode":"27409","city":"Greensboro","state":"NC","phoneNumber":"336-445-0006","email":"kcorsanal@usgs.gov"}, +{"id":383,"firstName":"Barri","lastName":"Brinsden","street":"53 Shelley Drive","postalCode":"35225","city":"Birmingham","state":"AL","email":"bbrinsdenam@1und1.de"}, +{"id":384,"firstName":"Hyacintha","lastName":"Boddam","street":"45 Sugar Circle","postalCode":"10160","city":"New York City","state":"NY","phoneNumber":"212-794-6062"}, +{"id":385,"firstName":"Brande","lastName":"Remnant","street":"283 Stone Corner Road","postalCode":"31904","city":"Columbus","state":"GA","phoneNumber":"706-211-4851","email":"bremnantao@people.com.cn"}, +{"id":386,"firstName":"Tally","lastName":"Bygraves","street":"54833 Northport Pass","postalCode":"85072","city":"Phoenix","state":"AZ","email":"tbygravesap@jigsy.com"}, +{"id":387,"firstName":"Garfield","lastName":"Pressnell","street":"63077 Hudson Court","postalCode":"30061","city":"Marietta","state":"GA","email":"gpressnellaq@archive.org"}, +{"id":388,"firstName":"Romonda","lastName":"Stiggles","street":"17 Russell Parkway","postalCode":"32627","city":"Gainesville","state":"FL","phoneNumber":"352-600-9676"}, +{"id":389,"firstName":"Dedie","lastName":"Ralling","street":"8 Judy Plaza","postalCode":"94137","city":"San Francisco","state":"CA","email":"drallingas@wikia.com"}, +{"id":390,"firstName":"Maddi","lastName":"Cornau","street":"5 Oriole Way","postalCode":"92105","city":"San Diego","state":"CA","phoneNumber":"619-388-6359","email":"mcornauat@adobe.com"}, +{"id":391,"firstName":"Zeke","lastName":"Jennery","street":"65332 Sommers Avenue","postalCode":"48206","city":"Detroit","state":"MI","email":"zjenneryau@elegantthemes.com"}, +{"id":392,"firstName":"Danya","lastName":"Fairlaw","street":"343 Logan Alley","postalCode":"33111","city":"Miami","state":"FL","email":"dfairlawav@irs.gov"}, +{"id":393,"firstName":"Rabi","lastName":"Petheridge","street":"7 Monica Alley","postalCode":"64054","city":"Independence","state":"MO","phoneNumber":"816-501-9452"}, +{"id":394,"firstName":"Ebba","lastName":"Skellen","street":"2655 Iowa Terrace","postalCode":"63150","city":"Saint Louis","state":"MO","phoneNumber":"314-695-7831","email":"eskellenax@nbcnews.com"}, +{"id":395,"firstName":"Marie-ann","lastName":"Glaysher","street":"4 Lakewood Hill","postalCode":"12247","city":"Albany","state":"NY","phoneNumber":"518-634-2425"}, +{"id":396,"firstName":"Arne","lastName":"Quincey","street":"162 Redwing Way","postalCode":"83711","city":"Boise","state":"ID"}, +{"id":397,"firstName":"Clarita","lastName":"Okroy","street":"05 Delaware Way","postalCode":"45218","city":"Cincinnati","state":"OH","email":"cokroyb0@stumbleupon.com"}, +{"id":398,"firstName":"Renault","lastName":"Weighell","street":"498 Dovetail Place","postalCode":"79710","city":"Midland","state":"TX","phoneNumber":"432-955-1408"}, +{"id":399,"firstName":"Roderich","lastName":"Mankor","street":"07 Dayton Way","postalCode":"92160","city":"San Diego","state":"CA"}, +{"id":400,"firstName":"Arv","lastName":"Sunnex","street":"89 Ronald Regan Terrace","postalCode":"91109","city":"Pasadena","state":"CA","email":"asunnexb3@vkontakte.ru"}, +{"id":401,"firstName":"Sonia","lastName":"Cowperthwaite","street":"77 Dennis Point","postalCode":"16550","city":"Erie","state":"PA"}, +{"id":402,"firstName":"Buddie","lastName":"Goscomb","street":"85675 Eastlawn Pass","postalCode":"20535","city":"Washington","state":"DC"}, +{"id":403,"firstName":"Brandi","lastName":"Swaine","street":"39961 Del Mar Lane","postalCode":"39705","city":"Columbus","state":"MS","phoneNumber":"662-306-2164","email":"bswaineb6@miibeian.gov.cn"}, +{"id":404,"firstName":"Jenny","lastName":"Cabbell","street":"743 Fordem Center","postalCode":"78285","city":"San Antonio","state":"TX","phoneNumber":"210-491-9874","email":"jcabbellb7@techcrunch.com"}, +{"id":405,"firstName":"Vincent","lastName":"People","street":"83 Tennessee Way","postalCode":"77293","city":"Houston","state":"TX","phoneNumber":"281-261-1928","email":"vpeopleb8@github.io"}, +{"id":406,"firstName":"Reinald","lastName":"Roles","street":"2 Division Road","postalCode":"53785","city":"Madison","state":"WI","phoneNumber":"608-568-7958","email":"rrolesb9@google.fr"}, +{"id":407,"firstName":"Kale","lastName":"Wanek","street":"7 Crescent Oaks Terrace","postalCode":"46852","city":"Fort Wayne","state":"IN","phoneNumber":"260-844-9669","email":"kwanekba@scribd.com"}, +{"id":408,"firstName":"Charisse","lastName":"Perse","street":"94449 Gateway Street","postalCode":"91117","city":"Pasadena","state":"CA","email":"cpersebb@ycombinator.com"}, +{"id":409,"firstName":"Konstantin","lastName":"Aslum","street":"08 Kings Trail","postalCode":"80328","city":"Boulder","state":"CO","email":"kaslumbc@opera.com"}, +{"id":410,"firstName":"Tyson","lastName":"O'Hartigan","street":"75122 Crowley Place","postalCode":"95173","city":"San Jose","state":"CA","phoneNumber":"408-879-0901","email":"tohartiganbd@devhub.com"}, +{"id":411,"firstName":"Fallon","lastName":"Haysman","street":"477 High Crossing Place","postalCode":"23293","city":"Richmond","state":"VA"}, +{"id":412,"firstName":"Svend","lastName":"Scarlet","street":"2856 Merrick Circle","postalCode":"90087","city":"Los Angeles","state":"CA","email":"sscarletbf@clickbank.net"}, +{"id":413,"firstName":"Gabey","lastName":"Colter","street":"7 2nd Alley","postalCode":"90610","city":"Whittier","state":"CA"}, +{"id":414,"firstName":"Hart","lastName":"Densell","street":"2687 Elka Alley","postalCode":"99599","city":"Anchorage","state":"AK","phoneNumber":"907-286-6079"}, +{"id":415,"firstName":"Claresta","lastName":"Folger","street":"5 Amoth Alley","postalCode":"27116","city":"Winston Salem","state":"NC"}, +{"id":416,"firstName":"Rica","lastName":"Lightowlers","street":"54303 Mayer Drive","postalCode":"61825","city":"Champaign","state":"IL","email":"rlightowlersbj@so-net.ne.jp"}, +{"id":417,"firstName":"Paula","lastName":"Treadaway","street":"8 Anniversary Road","postalCode":"20456","city":"Washington","state":"DC"}, +{"id":418,"firstName":"Francoise","lastName":"Gooderick","street":"13 Knutson Lane","postalCode":"33325","city":"Fort Lauderdale","state":"FL","email":"fgooderickbl@dedecms.com"}, +{"id":419,"firstName":"Ferdy","lastName":"Nannizzi","street":"578 Esker Trail","postalCode":"25321","city":"Charleston","state":"WV","email":"fnannizzibm@rambler.ru"}, +{"id":420,"firstName":"Dody","lastName":"Gettone","street":"9 Veith Court","postalCode":"62711","city":"Springfield","state":"IL"}, +{"id":421,"firstName":"Ronna","lastName":"Godleman","street":"6 Jenna Trail","postalCode":"22301","city":"Alexandria","state":"VA","email":"rgodlemanbo@hexun.com"}, +{"id":422,"firstName":"Adey","lastName":"Waith","street":"2 Mayer Avenue","postalCode":"12325","city":"Schenectady","state":"NY"}, +{"id":423,"firstName":"Stanislaw","lastName":"Garahan","street":"660 Merry Avenue","postalCode":"62723","city":"Springfield","state":"IL","phoneNumber":"217-587-6734"}, +{"id":424,"firstName":"Westley","lastName":"Knowles","street":"67430 Lakeland Circle","postalCode":"53263","city":"Milwaukee","state":"WI","email":"wknowlesbr@msu.edu"}, +{"id":425,"firstName":"Dion","lastName":"Jamson","street":"696 Birchwood Circle","postalCode":"80015","city":"Aurora","state":"CO","phoneNumber":"720-486-4494"}, +{"id":426,"firstName":"Glynis","lastName":"Bourhill","street":"091 Harper Park","postalCode":"40250","city":"Louisville","state":"KY"}, +{"id":427,"firstName":"Massimo","lastName":"Briand","street":"37 Northview Junction","postalCode":"75507","city":"Texarkana","state":"TX","email":"mbriandbu@etsy.com"}, +{"id":428,"firstName":"Tremayne","lastName":"Cadore","street":"6721 Anthes Point","postalCode":"94605","city":"Oakland","state":"CA","email":"tcadorebv@mozilla.com"}, +{"id":429,"firstName":"Lea","lastName":"Wildman","street":"52 Dixon Point","postalCode":"50310","city":"Des Moines","state":"IA","phoneNumber":"515-536-2096"}, +{"id":430,"firstName":"Ambur","lastName":"Oxlade","street":"356 Porter Center","postalCode":"44485","city":"Warren","state":"OH"}, +{"id":431,"firstName":"Jyoti","lastName":"Gillet","street":"13 Del Mar Parkway","postalCode":"81505","city":"Grand Junction","state":"CO","phoneNumber":"970-598-0357"}, +{"id":432,"firstName":"Sascha","lastName":"Stanyan","street":"77289 Blue Bill Park Alley","postalCode":"06120","city":"Hartford","state":"CT","email":"sstanyanbz@geocities.jp"}, +{"id":433,"firstName":"Spenser","lastName":"Harry","street":"2021 Oak Place","postalCode":"32835","city":"Orlando","state":"FL","email":"sharryc0@privacy.gov.au"}, +{"id":434,"firstName":"Clim","lastName":"Penrose","street":"8 Warrior Road","postalCode":"15255","city":"Pittsburgh","state":"PA","email":"cpenrosec1@blogtalkradio.com"}, +{"id":435,"firstName":"Jewell","lastName":"McKinnon","street":"4 Delladonna Street","postalCode":"36114","city":"Montgomery","state":"AL","email":"jmckinnonc2@tinypic.com"}, +{"id":436,"firstName":"Estrellita","lastName":"Amburgy","street":"5538 Tennessee Plaza","postalCode":"17121","city":"Harrisburg","state":"PA","phoneNumber":"717-274-8930","email":"eamburgyc3@forbes.com"}, +{"id":437,"firstName":"Sarah","lastName":"Fears","street":"61 Springs Park","postalCode":"93034","city":"Oxnard","state":"CA","email":"sfearsc4@wisc.edu"}, +{"id":438,"firstName":"Nixie","lastName":"Peddie","street":"7 Armistice Way","postalCode":"10155","city":"New York City","state":"NY","email":"npeddiec5@free.fr"}, +{"id":439,"firstName":"Ardisj","lastName":"Rohmer","street":"726 Crowley Point","postalCode":"93399","city":"Bakersfield","state":"CA","email":"arohmerc6@google.nl"}, +{"id":440,"firstName":"Wallie","lastName":"Johanssen","street":"9555 Jana Park","postalCode":"28410","city":"Wilmington","state":"NC","phoneNumber":"910-160-4520","email":"wjohanssenc7@boston.com"}, +{"id":441,"firstName":"Allan","lastName":"Jodlkowski","street":"31585 Kedzie Park","postalCode":"89150","city":"Las Vegas","state":"NV","phoneNumber":"702-782-3289","email":"ajodlkowskic8@sogou.com"}, +{"id":442,"firstName":"Harris","lastName":"Cadden","street":"96829 Fieldstone Park","postalCode":"16565","city":"Erie","state":"PA","phoneNumber":"814-745-1099"}, +{"id":443,"firstName":"Nigel","lastName":"Girardengo","street":"24703 Red Cloud Road","postalCode":"90310","city":"Inglewood","state":"CA","email":"ngirardengoca@ow.ly"}, +{"id":444,"firstName":"Aila","lastName":"Tinniswood","street":"62812 Stephen Parkway","postalCode":"13205","city":"Syracuse","state":"NY","phoneNumber":"315-847-2259","email":"atinniswoodcb@google.com.br"}, +{"id":445,"firstName":"Genni","lastName":"Geockle","street":"81 Bobwhite Plaza","postalCode":"93721","city":"Fresno","state":"CA","email":"ggeocklecc@furl.net"}, +{"id":446,"firstName":"Madison","lastName":"Brikner","street":"166 Coolidge Trail","postalCode":"07208","city":"Elizabeth","state":"NJ","email":"mbriknercd@myspace.com"}, +{"id":447,"firstName":"Akim","lastName":"Gotthard.sf","street":"0017 Heffernan Parkway","postalCode":"71914","city":"Hot Springs National Park","state":"AR","email":"agotthardsfce@google.com.au"}, +{"id":448,"firstName":"Andria","lastName":"Cardello","street":"1089 Stang Road","postalCode":"96835","city":"Honolulu","state":"HI","phoneNumber":"808-372-6528"}, +{"id":449,"firstName":"Laureen","lastName":"Crawshaw","street":"13 Manitowish Avenue","postalCode":"23504","city":"Norfolk","state":"VA","phoneNumber":"757-220-4043"}, +{"id":450,"firstName":"Henderson","lastName":"Parmley","street":"3408 Superior Street","postalCode":"28410","city":"Wilmington","state":"NC","email":"hparmleych@diigo.com"}, +{"id":451,"firstName":"Henri","lastName":"Arnley","street":"54 Knutson Park","postalCode":"11470","city":"Jamaica","state":"NY","phoneNumber":"718-365-7389"}, +{"id":452,"firstName":"Phil","lastName":"Trunkfield","street":"07 Arizona Way","postalCode":"85030","city":"Phoenix","state":"AZ","email":"ptrunkfieldcj@cisco.com"}, +{"id":453,"firstName":"Chery","lastName":"Nangle","street":"03 Merrick Way","postalCode":"88569","city":"El Paso","state":"TX","phoneNumber":"915-959-5535","email":"cnangleck@tumblr.com"}, +{"id":454,"firstName":"Leora","lastName":"Fields","street":"0260 Eastlawn Lane","postalCode":"85311","city":"Glendale","state":"AZ","email":"lfieldscl@nyu.edu"}, +{"id":455,"firstName":"Ronnica","lastName":"Pocknoll","street":"786 Hovde Plaza","postalCode":"78410","city":"Corpus Christi","state":"TX","email":"rpocknollcm@unesco.org"}, +{"id":456,"firstName":"Valida","lastName":"Romayn","street":"1108 Hudson Drive","postalCode":"34615","city":"Clearwater","state":"FL","email":"vromayncn@usatoday.com"}, +{"id":457,"firstName":"Randee","lastName":"Strowther","street":"441 Cordelia Point","postalCode":"27710","city":"Durham","state":"NC","phoneNumber":"919-463-1516","email":"rstrowtherco@trellian.com"}, +{"id":458,"firstName":"Ansell","lastName":"Blacklock","street":"9393 Kedzie Point","postalCode":"75358","city":"Dallas","state":"TX","phoneNumber":"214-949-3912"}, +{"id":459,"firstName":"Bailie","lastName":"Wing","street":"79459 Buhler Way","postalCode":"15279","city":"Pittsburgh","state":"PA","phoneNumber":"412-431-5446"}, +{"id":460,"firstName":"Leesa","lastName":"Wellbeloved","street":"4553 Dakota Circle","postalCode":"40215","city":"Louisville","state":"KY","phoneNumber":"502-145-8496","email":"lwellbelovedcr@go.com"}, +{"id":461,"firstName":"Sarge","lastName":"Tocknell","street":"9884 North Alley","postalCode":"80249","city":"Denver","state":"CO","phoneNumber":"303-603-8315","email":"stocknellcs@artisteer.com"}, +{"id":462,"firstName":"Loralyn","lastName":"Grimolbie","street":"3620 Clyde Gallagher Junction","postalCode":"91103","city":"Pasadena","state":"CA","email":"lgrimolbiect@purevolume.com"}, +{"id":463,"firstName":"Ki","lastName":"Youdell","street":"3 Gina Center","postalCode":"81005","city":"Pueblo","state":"CO"}, +{"id":464,"firstName":"Katerine","lastName":"Herreros","street":"70 Westend Place","postalCode":"57105","city":"Sioux Falls","state":"SD"}, +{"id":465,"firstName":"Frasquito","lastName":"Nockolds","street":"21 Dwight Park","postalCode":"11236","city":"Brooklyn","state":"NY","phoneNumber":"917-761-0549"}, +{"id":466,"firstName":"Krystalle","lastName":"Brierly","street":"7797 Forest Dale Lane","postalCode":"90410","city":"Santa Monica","state":"CA","email":"kbrierlycx@simplemachines.org"}, +{"id":467,"firstName":"Tobin","lastName":"Guillford","street":"501 Messerschmidt Alley","postalCode":"98195","city":"Seattle","state":"WA","phoneNumber":"206-862-7413","email":"tguillfordcy@fastcompany.com"}, +{"id":468,"firstName":"Lorita","lastName":"Sikorski","street":"83 Corscot Junction","postalCode":"44905","city":"Mansfield","state":"OH","phoneNumber":"419-278-2324","email":"lsikorskicz@intel.com"}, +{"id":469,"firstName":"Hermon","lastName":"Chomley","street":"696 Talisman Lane","postalCode":"35290","city":"Birmingham","state":"AL"}, +{"id":470,"firstName":"Karolina","lastName":"Andrault","street":"49738 Maple Wood Place","postalCode":"99709","city":"Fairbanks","state":"AK","phoneNumber":"907-337-1698","email":"kandraultd1@bloglines.com"}, +{"id":471,"firstName":"Lev","lastName":"Pankhurst.","street":"442 Pennsylvania Crossing","postalCode":"23605","city":"Newport News","state":"VA","phoneNumber":"757-832-3631"}, +{"id":472,"firstName":"Bianca","lastName":"Garfath","street":"7 Forest Run Center","postalCode":"71914","city":"Hot Springs National Park","state":"AR","email":"bgarfathd3@youku.com"}, +{"id":473,"firstName":"Walden","lastName":"Van der Linde","street":"6 Namekagon Parkway","postalCode":"70187","city":"New Orleans","state":"LA","email":"wvanderlinded4@netscape.com"}, +{"id":474,"firstName":"Alexandra","lastName":"Vasyukhin","street":"471 School Alley","postalCode":"80910","city":"Colorado Springs","state":"CO","email":"avasyukhind5@samsung.com"}, +{"id":475,"firstName":"Perry","lastName":"Spere","street":"33 Autumn Leaf Street","postalCode":"79994","city":"El Paso","state":"TX","email":"pspered6@tamu.edu"}, +{"id":476,"firstName":"Cristobal","lastName":"Afonso","street":"5 Lake View Way","postalCode":"19136","city":"Philadelphia","state":"PA","email":"cafonsod7@themeforest.net"}, +{"id":477,"firstName":"Sebastien","lastName":"Annets","street":"4229 Bowman Trail","postalCode":"43699","city":"Toledo","state":"OH","phoneNumber":"419-981-8630","email":"sannetsd8@guardian.co.uk"}, +{"id":478,"firstName":"Prentice","lastName":"Desorts","street":"54 Mendota Drive","postalCode":"31196","city":"Atlanta","state":"GA","phoneNumber":"404-235-6736","email":"pdesortsd9@who.int"}, +{"id":479,"firstName":"Rubin","lastName":"Dunkerk","street":"035 Myrtle Park","postalCode":"94297","city":"Sacramento","state":"CA","phoneNumber":"916-658-2157","email":"rdunkerkda@columbia.edu"}, +{"id":480,"firstName":"Jesselyn","lastName":"Bidnall","street":"2353 Norway Maple Court","postalCode":"07522","city":"Paterson","state":"NJ","email":"jbidnalldb@4shared.com"}, +{"id":481,"firstName":"Arleta","lastName":"Massy","street":"2 Bluejay Lane","postalCode":"10310","city":"Staten Island","state":"NY"}, +{"id":482,"firstName":"Trescha","lastName":"Joncic","street":"052 Summit Way","postalCode":"13217","city":"Syracuse","state":"NY"}, +{"id":483,"firstName":"Joshuah","lastName":"Galbreth","street":"16 Elka Place","postalCode":"08922","city":"New Brunswick","state":"NJ","email":"jgalbrethde@rambler.ru"}, +{"id":484,"firstName":"Clywd","lastName":"Henlon","street":"26 Thackeray Pass","postalCode":"90040","city":"Los Angeles","state":"CA","email":"chenlondf@unesco.org"}, +{"id":485,"firstName":"Glenda","lastName":"Grayley","street":"6326 Ohio Plaza","postalCode":"91411","city":"Van Nuys","state":"CA"}, +{"id":486,"firstName":"Glynda","lastName":"Stokell","street":"6 Schmedeman Court","postalCode":"60641","city":"Chicago","state":"IL","email":"gstokelldh@ted.com"}, +{"id":487,"firstName":"Kath","lastName":"Harrap","street":"43769 Barby Plaza","postalCode":"32304","city":"Tallahassee","state":"FL","email":"kharrapdi@cargocollective.com"}, +{"id":488,"firstName":"Dickie","lastName":"Domotor","street":"2954 Toban Lane","postalCode":"98133","city":"Seattle","state":"WA","email":"ddomotordj@hhs.gov"}, +{"id":489,"firstName":"Ceciley","lastName":"Hitzke","street":"9102 Westport Pass","postalCode":"40618","city":"Frankfort","state":"KY","phoneNumber":"502-545-5506","email":"chitzkedk@newsvine.com"}, +{"id":490,"firstName":"Adler","lastName":"Webb-Bowen","street":"5 Hanover Street","postalCode":"32123","city":"Daytona Beach","state":"FL"}, +{"id":491,"firstName":"Fergus","lastName":"Domerq","street":"06 Hansons Road","postalCode":"58106","city":"Fargo","state":"ND","phoneNumber":"701-656-3778"}, +{"id":492,"firstName":"Kimbra","lastName":"Petherick","street":"867 Mayer Drive","postalCode":"39236","city":"Jackson","state":"MS"}, +{"id":493,"firstName":"Geneva","lastName":"Hobgen","street":"74 Vernon Parkway","postalCode":"53710","city":"Madison","state":"WI","email":"ghobgendo@google.de"}, +{"id":494,"firstName":"Jillane","lastName":"Skitral","street":"9747 Ruskin Point","postalCode":"22405","city":"Fredericksburg","state":"VA","email":"jskitraldp@mysql.com"}, +{"id":495,"firstName":"Carolin","lastName":"Pimblotte","street":"8 Union Way","postalCode":"75358","city":"Dallas","state":"TX","phoneNumber":"214-109-7114","email":"cpimblottedq@cargocollective.com"}, +{"id":496,"firstName":"Wandis","lastName":"Andreasson","street":"3 Nancy Parkway","postalCode":"70033","city":"Metairie","state":"LA","email":"wandreassondr@topsy.com"}, +{"id":497,"firstName":"Baily","lastName":"Dalliston","street":"602 Melrose Way","postalCode":"25331","city":"Charleston","state":"WV","email":"bdallistonds@storify.com"}, +{"id":498,"firstName":"Kissie","lastName":"Lammiman","street":"4 Memorial Terrace","postalCode":"06510","city":"New Haven","state":"CT","phoneNumber":"203-724-3731","email":"klammimandt@barnesandnoble.com"}, +{"id":499,"firstName":"Cloris","lastName":"Dorning","street":"4 Lien Road","postalCode":"37235","city":"Nashville","state":"TN","email":"cdorningdu@unesco.org"}, +{"id":500,"firstName":"Jemimah","lastName":"Juppe","street":"979 Tennessee Pass","postalCode":"85305","city":"Glendale","state":"AZ"}, +{"id":501,"firstName":"Fanchette","lastName":"Marlor","street":"90 Waywood Circle","postalCode":"44511","city":"Youngstown","state":"OH","email":"fmarlordw@is.gd"}, +{"id":502,"firstName":"Carmelle","lastName":"Stillmann","street":"9124 Sachtjen Way","postalCode":"74184","city":"Tulsa","state":"OK","email":"cstillmanndx@telegraph.co.uk"}, +{"id":503,"firstName":"Joelle","lastName":"Mumford","street":"5 Susan Point","postalCode":"28410","city":"Wilmington","state":"NC","email":"jmumforddy@yellowbook.com"}, +{"id":504,"firstName":"Vicky","lastName":"Danzelman","street":"472 Pond Junction","postalCode":"11220","city":"Brooklyn","state":"NY","email":"vdanzelmandz@stumbleupon.com"}, +{"id":505,"firstName":"Baudoin","lastName":"Grenshiels","street":"4703 Tony Circle","postalCode":"76198","city":"Fort Worth","state":"TX","email":"bgrenshielse0@devhub.com"}, +{"id":506,"firstName":"Rosetta","lastName":"Wennington","street":"3 Kensington Crossing","postalCode":"14619","city":"Rochester","state":"NY"}, +{"id":507,"firstName":"Eudora","lastName":"Murtell","street":"97 Mockingbird Circle","postalCode":"92867","city":"Orange","state":"CA","phoneNumber":"949-899-3967"}, +{"id":508,"firstName":"Sonnie","lastName":"Hawkin","street":"76669 Green Ridge Crossing","postalCode":"79491","city":"Lubbock","state":"TX","email":"shawkine3@wikia.com"}, +{"id":509,"firstName":"Ulysses","lastName":"Uman","street":"4 Fieldstone Circle","postalCode":"32128","city":"Daytona Beach","state":"FL","phoneNumber":"386-761-6071","email":"uumane4@multiply.com"}, +{"id":510,"firstName":"Alidia","lastName":"Kowalski","street":"3915 Harper Plaza","postalCode":"75221","city":"Dallas","state":"TX","email":"akowalskie5@simplemachines.org"}, +{"id":511,"firstName":"Willis","lastName":"Jeaneau","street":"8 Northport Center","postalCode":"37939","city":"Knoxville","state":"TN","phoneNumber":"865-336-2729","email":"wjeaneaue6@furl.net"}, +{"id":512,"firstName":"Clement","lastName":"Taudevin","street":"25062 Amoth Pass","postalCode":"31914","city":"Columbus","state":"GA","email":"ctaudevine7@mapquest.com"}, +{"id":513,"firstName":"Tally","lastName":"Arnatt","street":"5745 Nancy Terrace","postalCode":"95054","city":"Santa Clara","state":"CA","email":"tarnatte8@umich.edu"}, +{"id":514,"firstName":"Eldon","lastName":"Munnings","street":"17 Dayton Parkway","postalCode":"27690","city":"Raleigh","state":"NC","email":"emunningse9@gmpg.org"}, +{"id":515,"firstName":"Duffie","lastName":"Sibary","street":"840 Springview Avenue","postalCode":"48275","city":"Detroit","state":"MI","email":"dsibaryea@livejournal.com"}, +{"id":516,"firstName":"Winny","lastName":"Dobell","street":"0426 Lindbergh Street","postalCode":"81015","city":"Pueblo","state":"CO","phoneNumber":"719-882-3553","email":"wdobelleb@bizjournals.com"}, +{"id":517,"firstName":"Pancho","lastName":"Pointon","street":"79 Clyde Gallagher Park","postalCode":"97306","city":"Salem","state":"OR","phoneNumber":"503-151-2205"}, +{"id":518,"firstName":"Elston","lastName":"Warwicker","street":"96 Schmedeman Park","postalCode":"44705","city":"Canton","state":"OH","email":"ewarwickered@arstechnica.com"}, +{"id":519,"firstName":"Nicolle","lastName":"Shellcross","street":"23982 Cambridge Parkway","postalCode":"80940","city":"Colorado Springs","state":"CO","email":"nshellcrossee@hibu.com"}, +{"id":520,"firstName":"Bethanne","lastName":"Briggdale","street":"026 Portage Circle","postalCode":"43215","city":"Columbus","state":"OH","phoneNumber":"513-925-3139","email":"bbriggdaleef@flickr.com"}, +{"id":521,"firstName":"Elsey","lastName":"McCorry","street":"781 International Parkway","postalCode":"94286","city":"Sacramento","state":"CA","phoneNumber":"916-879-2104","email":"emccorryeg@sakura.ne.jp"}, +{"id":522,"firstName":"Abran","lastName":"Vasyuchov","street":"64 Grim Place","postalCode":"44177","city":"Cleveland","state":"OH"}, +{"id":523,"firstName":"Rhoda","lastName":"Grieveson","street":"50687 Towne Pass","postalCode":"11220","city":"Brooklyn","state":"NY","email":"rgrievesonei@mit.edu"}, +{"id":524,"firstName":"Florette","lastName":"Eke","street":"85057 Anzinger Lane","postalCode":"66225","city":"Shawnee Mission","state":"KS","phoneNumber":"913-299-0032","email":"fekeej@fema.gov"}, +{"id":525,"firstName":"Sheff","lastName":"Baigrie","street":"80366 Lawn Hill","postalCode":"02203","city":"Boston","state":"MA","phoneNumber":"617-556-4978","email":"sbaigrieek@aboutads.info"}, +{"id":526,"firstName":"Clarisse","lastName":"Hubbuck","street":"435 Truax Trail","postalCode":"02458","city":"Newton","state":"MA","phoneNumber":"781-641-2937"}, +{"id":527,"firstName":"Gilberte","lastName":"Yanele","street":"413 Glacier Hill Park","postalCode":"90610","city":"Whittier","state":"CA","phoneNumber":"562-451-1686","email":"gyaneleem@dot.gov"}, +{"id":528,"firstName":"Lefty","lastName":"Dufore","street":"957 Straubel Street","postalCode":"35220","city":"Birmingham","state":"AL","email":"lduforeen@slideshare.net"}, +{"id":529,"firstName":"Saul","lastName":"Shepperd","street":"44805 Sunnyside Place","postalCode":"32627","city":"Gainesville","state":"FL","phoneNumber":"352-904-7271"}, +{"id":530,"firstName":"Hadrian","lastName":"Cockhill","street":"479 Mayer Way","postalCode":"22119","city":"Merrifield","state":"VA","email":"hcockhillep@xrea.com"}, +{"id":531,"firstName":"Amalia","lastName":"Geare","street":"63075 Glendale Trail","postalCode":"90065","city":"Los Angeles","state":"CA","email":"ageareeq@vistaprint.com"}, +{"id":532,"firstName":"Adan","lastName":"Ibbeson","street":"5 Cambridge Lane","postalCode":"73142","city":"Oklahoma City","state":"OK"}, +{"id":533,"firstName":"Nicol","lastName":"Garbutt","street":"3 8th Street","postalCode":"50393","city":"Des Moines","state":"IA","phoneNumber":"515-946-8077"}, +{"id":534,"firstName":"Lilas","lastName":"Estcot","street":"1927 Mitchell Avenue","postalCode":"75185","city":"Mesquite","state":"TX","email":"lestcotet@ezinearticles.com"}, +{"id":535,"firstName":"Valina","lastName":"Dellenbrok","street":"1 Victoria Hill","postalCode":"45249","city":"Cincinnati","state":"OH","phoneNumber":"513-958-5055","email":"vdellenbrokeu@upenn.edu"}, +{"id":536,"firstName":"Gwen","lastName":"Harwell","street":"64275 Bartelt Terrace","postalCode":"93721","city":"Fresno","state":"CA"}, +{"id":537,"firstName":"Adriena","lastName":"Lochead","street":"0088 Hintze Point","postalCode":"43231","city":"Columbus","state":"OH","phoneNumber":"614-506-5616","email":"alocheadew@paypal.com"}, +{"id":538,"firstName":"Jacobo","lastName":"Jills","street":"809 Anderson Park","postalCode":"55557","city":"Young America","state":"MN","phoneNumber":"952-580-6574","email":"jjillsex@xing.com"}, +{"id":539,"firstName":"Saree","lastName":"Jeanequin","street":"0212 Clyde Gallagher Alley","postalCode":"32891","city":"Orlando","state":"FL","email":"sjeanequiney@who.int"}, +{"id":540,"firstName":"Kin","lastName":"Dewar","street":"3 Emmet Center","postalCode":"20244","city":"Washington","state":"DC","email":"kdewarez@discovery.com"}, +{"id":541,"firstName":"Kaleena","lastName":"Godfray","street":"4350 Eliot Parkway","postalCode":"76134","city":"Fort Worth","state":"TX","phoneNumber":"817-332-6412","email":"kgodfrayf0@webmd.com"}, +{"id":542,"firstName":"Wallace","lastName":"Poytres","street":"78157 Dovetail Crossing","postalCode":"14683","city":"Rochester","state":"NY","email":"wpoytresf1@springer.com"}, +{"id":543,"firstName":"Dur","lastName":"Burgise","street":"2 Weeping Birch Court","postalCode":"89130","city":"Las Vegas","state":"NV"}, +{"id":544,"firstName":"Sheridan","lastName":"Gardiner","street":"26 Gateway Crossing","postalCode":"64193","city":"Kansas City","state":"MO","phoneNumber":"816-647-4434","email":"sgardinerf3@jugem.jp"}, +{"id":545,"firstName":"Nickolaus","lastName":"Thomassen","street":"130 Anderson Drive","postalCode":"33330","city":"Fort Lauderdale","state":"FL","phoneNumber":"954-339-0290"}, +{"id":546,"firstName":"Boris","lastName":"Cortez","street":"55 Center Court","postalCode":"10184","city":"New York City","state":"NY","phoneNumber":"212-549-8414","email":"bcortezf5@mail.ru"}, +{"id":547,"firstName":"Candra","lastName":"Codner","street":"24078 Superior Point","postalCode":"93715","city":"Fresno","state":"CA","phoneNumber":"209-495-8135"}, +{"id":548,"firstName":"Ashton","lastName":"Hugin","street":"33 Fuller Place","postalCode":"63143","city":"Saint Louis","state":"MO"}, +{"id":549,"firstName":"Miguelita","lastName":"Lanceley","street":"34877 Arizona Street","postalCode":"80045","city":"Aurora","state":"CO","email":"mlanceleyf8@trellian.com"}, +{"id":550,"firstName":"Law","lastName":"Skim","street":"1795 Farmco Street","postalCode":"28230","city":"Charlotte","state":"NC","email":"lskimf9@bravesites.com"}, +{"id":551,"firstName":"Carlita","lastName":"Kindall","street":"7 Scofield Road","postalCode":"93709","city":"Fresno","state":"CA","email":"ckindallfa@zimbio.com"}, +{"id":552,"firstName":"Mehetabel","lastName":"Stawell","street":"648 Upham Plaza","postalCode":"75277","city":"Dallas","state":"TX","phoneNumber":"214-597-5958","email":"mstawellfb@ehow.com"}, +{"id":553,"firstName":"Charlena","lastName":"MacAlpyne","street":"2 Village Terrace","postalCode":"33758","city":"Clearwater","state":"FL","phoneNumber":"813-452-9764","email":"cmacalpynefc@xinhuanet.com"}, +{"id":554,"firstName":"Gayel","lastName":"Litel","street":"34782 Birchwood Road","postalCode":"46406","city":"Gary","state":"IN","phoneNumber":"219-156-8377","email":"glitelfd@alibaba.com"}, +{"id":555,"firstName":"Prisca","lastName":"Kanzler","street":"67 Miller Terrace","postalCode":"08619","city":"Trenton","state":"NJ","phoneNumber":"609-352-4487"}, +{"id":556,"firstName":"Marlowe","lastName":"Idenden","street":"396 Beilfuss Park","postalCode":"74103","city":"Tulsa","state":"OK","phoneNumber":"918-254-3102"}, +{"id":557,"firstName":"Ashley","lastName":"Skule","street":"2327 Valley Edge Terrace","postalCode":"93794","city":"Fresno","state":"CA","phoneNumber":"559-558-9123"}, +{"id":558,"firstName":"Trista","lastName":"Naptine","street":"646 Dahle Court","postalCode":"06538","city":"New Haven","state":"CT","phoneNumber":"203-257-3017","email":"tnaptinefh@hugedomains.com"}, +{"id":559,"firstName":"Hasheem","lastName":"Ottery","street":"004 Clemons Street","postalCode":"28815","city":"Asheville","state":"NC","phoneNumber":"828-768-3824","email":"hotteryfi@gmpg.org"}, +{"id":560,"firstName":"Alisa","lastName":"Bernhardt","street":"49 Cody Center","postalCode":"84120","city":"Salt Lake City","state":"UT","phoneNumber":"801-808-4005","email":"abernhardtfj@census.gov"}, +{"id":561,"firstName":"Isadora","lastName":"Hatchett","street":"78644 Hoepker Junction","postalCode":"77015","city":"Houston","state":"TX","email":"ihatchettfk@spiegel.de"}, +{"id":562,"firstName":"Valdemar","lastName":"Stithe","street":"75 East Street","postalCode":"48206","city":"Detroit","state":"MI","email":"vstithefl@marriott.com"}, +{"id":563,"firstName":"Elden","lastName":"Rebert","street":"2 Florence Place","postalCode":"65110","city":"Jefferson City","state":"MO","phoneNumber":"573-753-8030"}, +{"id":564,"firstName":"Stormie","lastName":"Trewartha","street":"59 Shoshone Lane","postalCode":"19136","city":"Philadelphia","state":"PA","phoneNumber":"215-466-6832"}, +{"id":565,"firstName":"Bernhard","lastName":"Boulsher","street":"50888 Dwight Drive","postalCode":"02114","city":"Boston","state":"MA","email":"bboulsherfo@zdnet.com"}, +{"id":566,"firstName":"Twyla","lastName":"Yerrill","street":"526 Clove Terrace","postalCode":"40745","city":"London","state":"KY","email":"tyerrillfp@smugmug.com"}, +{"id":567,"firstName":"Sullivan","lastName":"Dudeney","street":"953 Swallow Crossing","postalCode":"19160","city":"Philadelphia","state":"PA","email":"sdudeneyfq@kickstarter.com"}, +{"id":568,"firstName":"Estell","lastName":"Kiggel","street":"8170 Rusk Alley","postalCode":"20442","city":"Washington","state":"DC","phoneNumber":"202-645-5828","email":"ekiggelfr@imgur.com"}, +{"id":569,"firstName":"Jonis","lastName":"Pymer","street":"21296 International Pass","postalCode":"77844","city":"College Station","state":"TX","email":"jpymerfs@nymag.com"}, +{"id":570,"firstName":"Linea","lastName":"Cranmor","street":"2541 Thackeray Hill","postalCode":"31210","city":"Macon","state":"GA"}, +{"id":571,"firstName":"Starlin","lastName":"Reven","street":"7692 Mifflin Hill","postalCode":"66611","city":"Topeka","state":"KS","email":"srevenfu@nba.com"}, +{"id":572,"firstName":"Augusta","lastName":"Heustice","street":"947 Ramsey Lane","postalCode":"10292","city":"New York City","state":"NY","phoneNumber":"212-194-3346","email":"aheusticefv@cloudflare.com"}, +{"id":573,"firstName":"Glen","lastName":"O'Mailey","street":"90 6th Court","postalCode":"33982","city":"Punta Gorda","state":"FL","phoneNumber":"941-381-2231"}, +{"id":574,"firstName":"Astrix","lastName":"Bister","street":"505 Artisan Crossing","postalCode":"23324","city":"Chesapeake","state":"VA","phoneNumber":"757-469-4444","email":"abisterfx@uol.com.br"}, +{"id":575,"firstName":"Shaw","lastName":"Lidbetter","street":"70 New Castle Trail","postalCode":"10474","city":"Bronx","state":"NY","phoneNumber":"917-917-9173"}, +{"id":576,"firstName":"Yovonnda","lastName":"Wych","street":"97472 Derek Drive","postalCode":"90410","city":"Santa Monica","state":"CA","email":"ywychfz@symantec.com"}, +{"id":577,"firstName":"Harcourt","lastName":"Faier","street":"056 Northridge Street","postalCode":"16510","city":"Erie","state":"PA","email":"hfaierg0@cloudflare.com"}, +{"id":578,"firstName":"Archibold","lastName":"Kos","street":"6 Forster Park","postalCode":"63104","city":"Saint Louis","state":"MO","phoneNumber":"314-967-5566","email":"akosg1@soup.io"}, +{"id":579,"firstName":"Nataniel","lastName":"Beldom","street":"1 Sullivan Street","postalCode":"02453","city":"Waltham","state":"MA","email":"nbeldomg2@alibaba.com"}, +{"id":580,"firstName":"Felisha","lastName":"Bamfield","street":"970 Washington Avenue","postalCode":"12305","city":"Schenectady","state":"NY","email":"fbamfieldg3@jimdo.com"}, +{"id":581,"firstName":"Colly","lastName":"Rugge","street":"8 Golf Course Avenue","postalCode":"55172","city":"Saint Paul","state":"MN","phoneNumber":"651-450-9347","email":"cruggeg4@tmall.com"}, +{"id":582,"firstName":"Patti","lastName":"Maddrell","street":"0483 Coolidge Drive","postalCode":"74193","city":"Tulsa","state":"OK"}, +{"id":583,"firstName":"Antin","lastName":"Gabbetis","street":"93510 Clemons Drive","postalCode":"68583","city":"Lincoln","state":"NE","email":"agabbetisg6@java.com"}, +{"id":584,"firstName":"Bree","lastName":"Million","street":"3 Columbus Avenue","postalCode":"61614","city":"Peoria","state":"IL","phoneNumber":"309-360-1909","email":"bmilliong7@gnu.org"}, +{"id":585,"firstName":"Taber","lastName":"Lorait","street":"4 Melrose Way","postalCode":"62764","city":"Springfield","state":"IL","phoneNumber":"217-436-2021","email":"tloraitg8@cargocollective.com"}, +{"id":586,"firstName":"Roley","lastName":"Di Carlo","street":"981 Bowman Center","postalCode":"87505","city":"Santa Fe","state":"NM"}, +{"id":587,"firstName":"Seline","lastName":"Oxenham","street":"65051 Forest Run Center","postalCode":"94064","city":"Redwood City","state":"CA","email":"soxenhamga@fastcompany.com"}, +{"id":588,"firstName":"Costa","lastName":"Tomblin","street":"7 Arapahoe Alley","postalCode":"33315","city":"Fort Lauderdale","state":"FL","phoneNumber":"954-239-1335"}, +{"id":589,"firstName":"Opalina","lastName":"Cake","street":"88 Commercial Avenue","postalCode":"40215","city":"Louisville","state":"KY","email":"ocakegc@examiner.com"}, +{"id":590,"firstName":"Suzanne","lastName":"Giuroni","street":"73 Twin Pines Terrace","postalCode":"99260","city":"Spokane","state":"WA"}, +{"id":591,"firstName":"Faustine","lastName":"Croysdale","street":"01 Delladonna Point","postalCode":"48295","city":"Detroit","state":"MI"}, +{"id":592,"firstName":"Sheffie","lastName":"Aldine","street":"4 Hansons Junction","postalCode":"74108","city":"Tulsa","state":"OK"}, +{"id":593,"firstName":"Bret","lastName":"Birrane","street":"745 Mayer Junction","postalCode":"77030","city":"Houston","state":"TX","phoneNumber":"832-374-7571","email":"bbirranegg@opera.com"}, +{"id":594,"firstName":"Lennard","lastName":"Mowbury","street":"5 Dwight Road","postalCode":"94522","city":"Concord","state":"CA","email":"lmowburygh@1und1.de"}, +{"id":595,"firstName":"Albie","lastName":"Pert","street":"23705 Fieldstone Plaza","postalCode":"08922","city":"New Brunswick","state":"NJ","phoneNumber":"732-587-7312","email":"apertgi@netlog.com"}, +{"id":596,"firstName":"Stevie","lastName":"Pressnell","street":"0077 Ronald Regan Point","postalCode":"85020","city":"Phoenix","state":"AZ","phoneNumber":"623-991-0482","email":"spressnellgj@skype.com"}, +{"id":597,"firstName":"Eddy","lastName":"McIlreavy","street":"04 Luster Lane","postalCode":"94126","city":"San Francisco","state":"CA"}, +{"id":598,"firstName":"Webb","lastName":"Titterell","street":"94323 Kedzie Alley","postalCode":"91505","city":"Burbank","state":"CA","phoneNumber":"818-220-9105","email":"wtitterellgl@bandcamp.com"}, +{"id":599,"firstName":"Jeffrey","lastName":"Benito","street":"7487 Scott Lane","postalCode":"11470","city":"Jamaica","state":"NY","phoneNumber":"917-379-2592","email":"jbenitogm@deviantart.com"}, +{"id":600,"firstName":"Nollie","lastName":"Arsey","street":"7282 Summerview Plaza","postalCode":"55811","city":"Duluth","state":"MN","email":"narseygn@imageshack.us"}, +{"id":601,"firstName":"Petra","lastName":"Turpey","street":"43920 Evergreen Junction","postalCode":"77255","city":"Houston","state":"TX","phoneNumber":"713-446-0144"}, +{"id":602,"firstName":"Harwilll","lastName":"Lashbrook","street":"8063 Grasskamp Parkway","postalCode":"27621","city":"Raleigh","state":"NC","phoneNumber":"919-142-9887","email":"hlashbrookgp@seattletimes.com"}, +{"id":603,"firstName":"Tedman","lastName":"Steinor","street":"80230 Hanson Hill","postalCode":"47134","city":"Jeffersonville","state":"IN","email":"tsteinorgq@dmoz.org"}, +{"id":604,"firstName":"Georgette","lastName":"Tupper","street":"37 Lillian Avenue","postalCode":"33543","city":"Zephyrhills","state":"FL","phoneNumber":"813-743-2425","email":"gtuppergr@qq.com"}, +{"id":605,"firstName":"Torrance","lastName":"Welsh","street":"95802 Doe Crossing Crossing","postalCode":"13217","city":"Syracuse","state":"NY","phoneNumber":"315-145-4503","email":"twelshgs@imgur.com"}, +{"id":606,"firstName":"Silvie","lastName":"Souster","street":"52827 Fuller Place","postalCode":"99709","city":"Fairbanks","state":"AK"}, +{"id":607,"firstName":"Pauline","lastName":"Dulwitch","street":"8 Aberg Drive","postalCode":"17105","city":"Harrisburg","state":"PA","phoneNumber":"717-228-4960","email":"pdulwitchgu@aboutads.info"}, +{"id":608,"firstName":"Roberta","lastName":"Castanie","street":"182 Mosinee Avenue","postalCode":"75185","city":"Mesquite","state":"TX"}, +{"id":609,"firstName":"Percival","lastName":"Kristoffersen","street":"4 Del Mar Park","postalCode":"48335","city":"Farmington","state":"MI","phoneNumber":"248-438-1650","email":"pkristoffersengw@chron.com"}, +{"id":610,"firstName":"Caryl","lastName":"Boame","street":"094 Springview Avenue","postalCode":"78255","city":"San Antonio","state":"TX","email":"cboamegx@example.com"}, +{"id":611,"firstName":"Steve","lastName":"Simakov","street":"323 Brickson Park Trail","postalCode":"32244","city":"Jacksonville","state":"FL","phoneNumber":"904-468-9377","email":"ssimakovgy@angelfire.com"}, +{"id":612,"firstName":"Carl","lastName":"Tumayan","street":"93854 Clyde Gallagher Circle","postalCode":"98447","city":"Tacoma","state":"WA","email":"ctumayangz@1und1.de"}, +{"id":613,"firstName":"Gayle","lastName":"Blaker","street":"5930 Grasskamp Drive","postalCode":"12262","city":"Albany","state":"NY","email":"gblakerh0@spiegel.de"}, +{"id":614,"firstName":"Darrick","lastName":"Harefoot","street":"359 Waywood Trail","postalCode":"20189","city":"Dulles","state":"VA"}, +{"id":615,"firstName":"Sayer","lastName":"Eversfield","street":"86 Park Meadow Crossing","postalCode":"53263","city":"Milwaukee","state":"WI","email":"seversfieldh2@multiply.com"}, +{"id":616,"firstName":"Loralyn","lastName":"Poyner","street":"28530 Magdeline Crossing","postalCode":"84125","city":"Salt Lake City","state":"UT","phoneNumber":"801-363-2593"}, +{"id":617,"firstName":"Petrina","lastName":"Ridewood","street":"91782 Oriole Parkway","postalCode":"80235","city":"Denver","state":"CO","phoneNumber":"720-131-3660","email":"pridewoodh4@walmart.com"}, +{"id":618,"firstName":"Leroi","lastName":"Marde","street":"7992 Prairieview Junction","postalCode":"02142","city":"Cambridge","state":"MA","phoneNumber":"781-623-9420","email":"lmardeh5@oracle.com"}, +{"id":619,"firstName":"Brannon","lastName":"Janata","street":"79706 Wayridge Alley","postalCode":"24515","city":"Lynchburg","state":"VA","phoneNumber":"434-255-0721"}, +{"id":620,"firstName":"Berry","lastName":"Joska","street":"301 6th Alley","postalCode":"10150","city":"New York City","state":"NY","email":"bjoskah7@360.cn"}, +{"id":621,"firstName":"Blinnie","lastName":"Basten","street":"047 Canary Parkway","postalCode":"30343","city":"Atlanta","state":"GA","phoneNumber":"404-794-2760"}, +{"id":622,"firstName":"Inesita","lastName":"Abbitt","street":"8 Sachtjen Plaza","postalCode":"60681","city":"Chicago","state":"IL"}, +{"id":623,"firstName":"Nickie","lastName":"Ellicombe","street":"1067 Ridge Oak Terrace","postalCode":"38131","city":"Memphis","state":"TN","phoneNumber":"901-695-3826","email":"nellicombeha@imgur.com"}, +{"id":624,"firstName":"Barney","lastName":"Sheeres","street":"1 Rutledge Avenue","postalCode":"29208","city":"Columbia","state":"SC","phoneNumber":"803-166-1398"}, +{"id":625,"firstName":"Ogdan","lastName":"Lelievre","street":"27 Weeping Birch Plaza","postalCode":"27264","city":"High Point","state":"NC","phoneNumber":"336-416-3966","email":"olelievrehc@exblog.jp"}, +{"id":626,"firstName":"Zora","lastName":"Exter","street":"7 Ronald Regan Pass","postalCode":"33673","city":"Tampa","state":"FL"}, +{"id":627,"firstName":"Travus","lastName":"Jaulme","street":"3159 Montana Circle","postalCode":"79176","city":"Amarillo","state":"TX","phoneNumber":"806-894-9411"}, +{"id":628,"firstName":"Krishna","lastName":"Beckingham","street":"58 Fair Oaks Lane","postalCode":"30311","city":"Atlanta","state":"GA","email":"kbeckinghamhf@usnews.com"}, +{"id":629,"firstName":"Bartolomeo","lastName":"Bosanko","street":"753 Victoria Place","postalCode":"79699","city":"Abilene","state":"TX","phoneNumber":"325-223-9615","email":"bbosankohg@merriam-webster.com"}, +{"id":630,"firstName":"Umberto","lastName":"McGinly","street":"30 Upham Parkway","postalCode":"80945","city":"Colorado Springs","state":"CO","email":"umcginlyhh@cdc.gov"}, +{"id":631,"firstName":"Launce","lastName":"Fatkin","street":"03246 Esch Place","postalCode":"53779","city":"Madison","state":"WI","phoneNumber":"608-916-7032","email":"lfatkinhi@blogs.com"}, +{"id":632,"firstName":"Simone","lastName":"Soars","street":"9969 Forest Run Crossing","postalCode":"90101","city":"Los Angeles","state":"CA","phoneNumber":"213-282-8462"}, +{"id":633,"firstName":"Clerissa","lastName":"Leason","street":"59731 Mayfield Street","postalCode":"89510","city":"Reno","state":"NV"}, +{"id":634,"firstName":"Rutter","lastName":"Sultan","street":"697 Spenser Way","postalCode":"77245","city":"Houston","state":"TX"}, +{"id":635,"firstName":"Shannon","lastName":"De Carteret","street":"2 Grover Avenue","postalCode":"92717","city":"Irvine","state":"CA","phoneNumber":"714-410-2360","email":"sdecarterethm@simplemachines.org"}, +{"id":636,"firstName":"Sawyere","lastName":"Cardno","street":"428 Golf Course Drive","postalCode":"33111","city":"Miami","state":"FL"}, +{"id":637,"firstName":"Paulie","lastName":"Bucktharp","street":"5398 Sugar Park","postalCode":"10039","city":"New York City","state":"NY","phoneNumber":"646-197-4123","email":"pbucktharpho@businessweek.com"}, +{"id":638,"firstName":"Kippy","lastName":"Guisler","street":"2161 Claremont Trail","postalCode":"20546","city":"Washington","state":"DC","phoneNumber":"202-138-6171","email":"kguislerhp@ox.ac.uk"}, +{"id":639,"firstName":"Yoshiko","lastName":"Tolson","street":"2 Glendale Court","postalCode":"27415","city":"Greensboro","state":"NC","email":"ytolsonhq@example.com"}, +{"id":640,"firstName":"Page","lastName":"Chillingsworth","street":"8 Loomis Drive","postalCode":"55470","city":"Minneapolis","state":"MN","email":"pchillingsworthhr@wunderground.com"}, +{"id":641,"firstName":"Jillana","lastName":"O'Siaghail","street":"13517 Del Mar Road","postalCode":"29215","city":"Columbia","state":"SC","phoneNumber":"803-420-8597","email":"josiaghailhs@reuters.com"}, +{"id":642,"firstName":"Phedra","lastName":"Bagnold","street":"7059 Hallows Street","postalCode":"55470","city":"Minneapolis","state":"MN","email":"pbagnoldht@howstuffworks.com"}, +{"id":643,"firstName":"Bellina","lastName":"Gouldie","street":"7567 Bultman Way","postalCode":"88514","city":"El Paso","state":"TX","email":"bgouldiehu@salon.com"}, +{"id":644,"firstName":"Devi","lastName":"Bohden","street":"68833 Northview Hill","postalCode":"84115","city":"Salt Lake City","state":"UT"}, +{"id":645,"firstName":"Peggi","lastName":"Gobert","street":"667 Sauthoff Hill","postalCode":"44710","city":"Canton","state":"OH","email":"pgoberthw@mapy.cz"}, +{"id":646,"firstName":"Madelina","lastName":"Gurys","street":"70 Del Sol Trail","postalCode":"20420","city":"Washington","state":"DC","phoneNumber":"202-747-9276","email":"mguryshx@hibu.com"}, +{"id":647,"firstName":"Ikey","lastName":"Aubri","street":"76 Sutteridge Hill","postalCode":"36205","city":"Anniston","state":"AL","phoneNumber":"256-945-5095","email":"iaubrihy@mayoclinic.com"}, +{"id":648,"firstName":"Ginevra","lastName":"Duffitt","street":"25 Eagan Circle","postalCode":"31217","city":"Macon","state":"GA"}, +{"id":649,"firstName":"Cissiee","lastName":"Gozzard","street":"40240 Lillian Park","postalCode":"60609","city":"Chicago","state":"IL","email":"cgozzardi0@columbia.edu"}, +{"id":650,"firstName":"Sonny","lastName":"Jobern","street":"8 Green Trail","postalCode":"77065","city":"Houston","state":"TX","email":"sjoberni1@ucoz.com"}, +{"id":651,"firstName":"Mitch","lastName":"Guidera","street":"0 Dorton Junction","postalCode":"35210","city":"Birmingham","state":"AL","phoneNumber":"205-224-0177"}, +{"id":652,"firstName":"Dorey","lastName":"Marks","street":"81562 Maywood Crossing","postalCode":"71208","city":"Monroe","state":"LA","phoneNumber":"318-492-5487"}, +{"id":653,"firstName":"Pavla","lastName":"Conneely","street":"4007 Mifflin Lane","postalCode":"20456","city":"Washington","state":"DC"}, +{"id":654,"firstName":"Kym","lastName":"Gecks","street":"72638 Namekagon Plaza","postalCode":"61656","city":"Peoria","state":"IL","email":"kgecksi5@nature.com"}, +{"id":655,"firstName":"Prudence","lastName":"Peert","street":"91 Tomscot Parkway","postalCode":"32209","city":"Jacksonville","state":"FL","phoneNumber":"904-277-2945","email":"ppeerti6@usa.gov"}, +{"id":656,"firstName":"Elston","lastName":"Paolo","street":"4 Jenna Crossing","postalCode":"95155","city":"San Jose","state":"CA","email":"epaoloi7@umn.edu"}, +{"id":657,"firstName":"Indira","lastName":"Splaven","street":"8853 Vermont Drive","postalCode":"38188","city":"Memphis","state":"TN","phoneNumber":"901-706-3908","email":"isplaveni8@fda.gov"}, +{"id":658,"firstName":"Paul","lastName":"Mc Meekin","street":"56 Vidon Drive","postalCode":"08695","city":"Trenton","state":"NJ","phoneNumber":"609-361-1580"}, +{"id":659,"firstName":"Hadley","lastName":"Windmill","street":"31384 Evergreen Point","postalCode":"16550","city":"Erie","state":"PA","email":"hwindmillia@yale.edu"}, +{"id":660,"firstName":"Jay","lastName":"Yesichev","street":"675 Starling Pass","postalCode":"89150","city":"Las Vegas","state":"NV"}, +{"id":661,"firstName":"Ranna","lastName":"Dowtry","street":"303 Nevada Pass","postalCode":"48550","city":"Flint","state":"MI","phoneNumber":"810-164-4521","email":"rdowtryic@amazon.co.jp"}, +{"id":662,"firstName":"Annabel","lastName":"Pellamont","street":"277 Merrick Crossing","postalCode":"36605","city":"Mobile","state":"AL","phoneNumber":"251-595-3594","email":"apellamontid@reverbnation.com"}, +{"id":663,"firstName":"Kaitlynn","lastName":"Tracey","street":"612 Magdeline Road","postalCode":"97296","city":"Portland","state":"OR","email":"ktraceyie@ycombinator.com"}, +{"id":664,"firstName":"Matthiew","lastName":"Jills","street":"65 Walton Circle","postalCode":"93750","city":"Fresno","state":"CA","email":"mjillsif@addthis.com"}, +{"id":665,"firstName":"Bartlet","lastName":"Roe","street":"51573 Mandrake Park","postalCode":"02109","city":"Boston","state":"MA","phoneNumber":"617-460-5377","email":"broeig@nasa.gov"}, +{"id":666,"firstName":"Ban","lastName":"Knotton","street":"174 Westridge Parkway","postalCode":"32405","city":"Panama City","state":"FL","phoneNumber":"850-939-6502","email":"bknottonih@businesswire.com"}, +{"id":667,"firstName":"Cordelie","lastName":"O'Dee","street":"1733 Linden Avenue","postalCode":"80940","city":"Colorado Springs","state":"CO","phoneNumber":"719-966-3402","email":"codeeii@amazonaws.com"}, +{"id":668,"firstName":"Hardy","lastName":"Lob","street":"4 Bultman Road","postalCode":"75074","city":"Plano","state":"TX","email":"hlobij@dropbox.com"}, +{"id":669,"firstName":"Rosabelle","lastName":"Tonner","street":"1 Holy Cross Trail","postalCode":"36670","city":"Mobile","state":"AL","phoneNumber":"251-606-9437","email":"rtonnerik@google.ru"}, +{"id":670,"firstName":"Bernardina","lastName":"Mardy","street":"65 Myrtle Center","postalCode":"96845","city":"Honolulu","state":"HI","email":"bmardyil@wordpress.com"}, +{"id":671,"firstName":"Hynda","lastName":"Soldner","street":"88 Hazelcrest Drive","postalCode":"55470","city":"Minneapolis","state":"MN","email":"hsoldnerim@webeden.co.uk"}, +{"id":672,"firstName":"Quinn","lastName":"Templeton","street":"5 Village Way","postalCode":"19131","city":"Philadelphia","state":"PA","email":"qtempletonin@diigo.com"}, +{"id":673,"firstName":"Torrence","lastName":"Askwith","street":"1 Namekagon Point","postalCode":"31410","city":"Savannah","state":"GA","phoneNumber":"912-552-5239","email":"taskwithio@people.com.cn"}, +{"id":674,"firstName":"Bonnie","lastName":"Robilliard","street":"731 Johnson Lane","postalCode":"24515","city":"Lynchburg","state":"VA","phoneNumber":"434-382-5496"}, +{"id":675,"firstName":"Daphna","lastName":"D'Souza","street":"1549 Loftsgordon Center","postalCode":"91406","city":"Van Nuys","state":"CA","phoneNumber":"818-773-9088"}, +{"id":676,"firstName":"Palm","lastName":"Gandrich","street":"9 4th Pass","postalCode":"87121","city":"Albuquerque","state":"NM","phoneNumber":"505-815-5555"}, +{"id":677,"firstName":"Danie","lastName":"Gaydon","street":"382 Bayside Junction","postalCode":"55441","city":"Minneapolis","state":"MN","phoneNumber":"952-744-9400","email":"dgaydonis@seesaa.net"}, +{"id":678,"firstName":"Tabatha","lastName":"Caddock","street":"3858 Mccormick Road","postalCode":"53779","city":"Madison","state":"WI","phoneNumber":"608-996-7653","email":"tcaddockit@gizmodo.com"}, +{"id":679,"firstName":"Sergent","lastName":"Cade","street":"7 Riverside Crossing","postalCode":"13505","city":"Utica","state":"NY","email":"scadeiu@google.co.uk"}, +{"id":680,"firstName":"Shina","lastName":"Dumphry","street":"483 Del Mar Terrace","postalCode":"73109","city":"Oklahoma City","state":"OK","phoneNumber":"405-261-3364","email":"sdumphryiv@mediafire.com"}, +{"id":681,"firstName":"Aaron","lastName":"O'Neal","street":"669 Crowley Road","postalCode":"87140","city":"Albuquerque","state":"NM","phoneNumber":"505-451-6591","email":"aonealiw@npr.org"}, +{"id":682,"firstName":"Cynthea","lastName":"Wippermann","street":"109 Kinsman Parkway","postalCode":"06606","city":"Bridgeport","state":"CT","phoneNumber":"203-799-4552"}, +{"id":683,"firstName":"Stoddard","lastName":"Hullett","street":"06200 Mesta Park","postalCode":"78769","city":"Austin","state":"TX","phoneNumber":"512-190-7003"}, +{"id":684,"firstName":"Margit","lastName":"Comusso","street":"54 Springs Center","postalCode":"33737","city":"Saint Petersburg","state":"FL","phoneNumber":"727-144-3743","email":"mcomussoiz@drupal.org"}, +{"id":685,"firstName":"Dur","lastName":"Manns","street":"464 Park Meadow Road","postalCode":"90015","city":"Los Angeles","state":"CA","email":"dmannsj0@nymag.com"}, +{"id":686,"firstName":"Hollie","lastName":"Aldersey","street":"12195 Mallory Court","postalCode":"21405","city":"Annapolis","state":"MD","email":"halderseyj1@businessinsider.com"}, +{"id":687,"firstName":"Ralina","lastName":"Crepin","street":"13313 Clyde Gallagher Way","postalCode":"78285","city":"San Antonio","state":"TX"}, +{"id":688,"firstName":"Lyell","lastName":"Graveston","street":"20 Talisman Crossing","postalCode":"27157","city":"Winston Salem","state":"NC","phoneNumber":"336-638-3366","email":"lgravestonj3@webmd.com"}, +{"id":689,"firstName":"Anny","lastName":"Potell","street":"0 Ludington Circle","postalCode":"32803","city":"Orlando","state":"FL","email":"apotellj4@microsoft.com"}, +{"id":690,"firstName":"Harriot","lastName":"Klimpke","street":"8 Southridge Alley","postalCode":"22047","city":"Falls Church","state":"VA","phoneNumber":"571-470-2688","email":"hklimpkej5@slashdot.org"}, +{"id":691,"firstName":"Stacia","lastName":"Stainsby","street":"78 Mcbride Avenue","postalCode":"46862","city":"Fort Wayne","state":"IN"}, +{"id":692,"firstName":"Zacharia","lastName":"Willmont","street":"24 Everett Center","postalCode":"73135","city":"Oklahoma City","state":"OK","phoneNumber":"405-167-0584","email":"zwillmontj7@tuttocitta.it"}, +{"id":693,"firstName":"Dorelia","lastName":"Flexman","street":"0 Hauk Crossing","postalCode":"95298","city":"Stockton","state":"CA","phoneNumber":"209-759-3308"}, +{"id":694,"firstName":"Rubi","lastName":"Karran","street":"586 Eggendart Pass","postalCode":"64082","city":"Lees Summit","state":"MO","email":"rkarranj9@yahoo.com"}, +{"id":695,"firstName":"Edlin","lastName":"Davidsen","street":"5646 Arrowood Park","postalCode":"20591","city":"Washington","state":"DC","phoneNumber":"202-800-5817","email":"edavidsenja@purevolume.com"}, +{"id":696,"firstName":"Oralle","lastName":"Coneybeare","street":"0 Lakewood Parkway","postalCode":"08695","city":"Trenton","state":"NJ","email":"oconeybearejb@booking.com"}, +{"id":697,"firstName":"Scotti","lastName":"Cereceres","street":"2 Golf Hill","postalCode":"38119","city":"Memphis","state":"TN"}, +{"id":698,"firstName":"Hermione","lastName":"Mingotti","street":"14 Shoshone Alley","postalCode":"44511","city":"Youngstown","state":"OH","phoneNumber":"330-505-0585"}, +{"id":699,"firstName":"Janka","lastName":"Merredy","street":"877 Reinke Park","postalCode":"45233","city":"Cincinnati","state":"OH","email":"jmerredyje@furl.net"}, +{"id":700,"firstName":"Phillida","lastName":"Gannicleff","street":"48778 Sheridan Center","postalCode":"99210","city":"Spokane","state":"WA","email":"pgannicleffjf@github.io"}, +{"id":701,"firstName":"Bryn","lastName":"Shury","street":"82609 Surrey Road","postalCode":"78240","city":"San Antonio","state":"TX","phoneNumber":"210-361-9404","email":"bshuryjg@arstechnica.com"}, +{"id":702,"firstName":"Bobbe","lastName":"Yurocjhin","street":"54904 Southridge Parkway","postalCode":"33633","city":"Tampa","state":"FL","email":"byurocjhinjh@tumblr.com"}, +{"id":703,"firstName":"Noell","lastName":"Trewman","street":"63703 Fair Oaks Point","postalCode":"91520","city":"Burbank","state":"CA"}, +{"id":704,"firstName":"Adelind","lastName":"Marr","street":"68 Lotheville Park","postalCode":"02912","city":"Providence","state":"RI","email":"amarrjj@hexun.com"}, +{"id":705,"firstName":"Arabelle","lastName":"Oultram","street":"7927 Waxwing Place","postalCode":"77085","city":"Houston","state":"TX","email":"aoultramjk@diigo.com"}, +{"id":706,"firstName":"Derril","lastName":"Whylie","street":"1 Summerview Terrace","postalCode":"91606","city":"North Hollywood","state":"CA","phoneNumber":"323-244-3266","email":"dwhyliejl@auda.org.au"}, +{"id":707,"firstName":"Isadore","lastName":"Airth","street":"08897 Hauk Court","postalCode":"73104","city":"Oklahoma City","state":"OK","phoneNumber":"405-488-1807"}, +{"id":708,"firstName":"Barbara","lastName":"Feast","street":"420 Bayside Circle","postalCode":"63136","city":"Saint Louis","state":"MO","phoneNumber":"314-919-9094"}, +{"id":709,"firstName":"Engracia","lastName":"Laxtonne","street":"189 Oneill Center","postalCode":"22047","city":"Falls Church","state":"VA","email":"elaxtonnejo@addthis.com"}, +{"id":710,"firstName":"Dorice","lastName":"Dearle","street":"655 Union Way","postalCode":"47705","city":"Evansville","state":"IN","phoneNumber":"812-812-8795","email":"ddearlejp@mail.ru"}, +{"id":711,"firstName":"Crissie","lastName":"Leall","street":"1 1st Drive","postalCode":"36689","city":"Mobile","state":"AL","phoneNumber":"251-112-1542","email":"clealljq@nyu.edu"}, +{"id":712,"firstName":"Rica","lastName":"Wilshin","street":"0 Miller Way","postalCode":"79705","city":"Midland","state":"TX","phoneNumber":"432-935-1867"}, +{"id":713,"firstName":"Annie","lastName":"Thorns","street":"297 Thompson Park","postalCode":"32412","city":"Panama City","state":"FL","phoneNumber":"850-594-4049"}, +{"id":714,"firstName":"Lilah","lastName":"Beining","street":"1566 American Ash Avenue","postalCode":"25326","city":"Charleston","state":"WV","email":"lbeiningjt@mayoclinic.com"}, +{"id":715,"firstName":"Leeann","lastName":"Dorant","street":"5530 Mcguire Alley","postalCode":"93407","city":"San Luis Obispo","state":"CA","email":"ldorantju@homestead.com"}, +{"id":716,"firstName":"Elinor","lastName":"James","street":"2 Waxwing Terrace","postalCode":"88579","city":"El Paso","state":"TX","email":"ejamesjv@europa.eu"}, +{"id":717,"firstName":"Novelia","lastName":"Durman","street":"7 Hermina Junction","postalCode":"77050","city":"Houston","state":"TX","email":"ndurmanjw@fc2.com"}, +{"id":718,"firstName":"Sharai","lastName":"Pickervance","street":"739 Lien Junction","postalCode":"73167","city":"Oklahoma City","state":"OK","email":"spickervancejx@independent.co.uk"}, +{"id":719,"firstName":"Gilberte","lastName":"Stilling","street":"29950 Annamark Trail","postalCode":"89178","city":"Las Vegas","state":"NV","phoneNumber":"702-604-4240","email":"gstillingjy@feedburner.com"}, +{"id":720,"firstName":"Rosabelle","lastName":"Guinan","street":"13078 Sutherland Center","postalCode":"83757","city":"Boise","state":"ID","phoneNumber":"208-792-6705"}, +{"id":721,"firstName":"Karin","lastName":"Ackermann","street":"3 Susan Hill","postalCode":"48919","city":"Lansing","state":"MI","phoneNumber":"517-579-7811","email":"kackermannk0@csmonitor.com"}, +{"id":722,"firstName":"Reeta","lastName":"Attwell","street":"96 Alpine Junction","postalCode":"66622","city":"Topeka","state":"KS"}, +{"id":723,"firstName":"Dru","lastName":"Linck","street":"37 Wayridge Place","postalCode":"49505","city":"Grand Rapids","state":"MI","phoneNumber":"616-197-1837"}, +{"id":724,"firstName":"Frances","lastName":"Collingridge","street":"273 Ludington Crossing","postalCode":"77255","city":"Houston","state":"TX"}, +{"id":725,"firstName":"Wilmette","lastName":"Haimes","street":"8408 Shopko Circle","postalCode":"98907","city":"Yakima","state":"WA","phoneNumber":"509-821-5948"}, +{"id":726,"firstName":"Isahella","lastName":"Rubrow","street":"25 Melby Crossing","postalCode":"59105","city":"Billings","state":"MT","email":"irubrowk5@edublogs.org"}, +{"id":727,"firstName":"Walden","lastName":"Sappson","street":"1 3rd Hill","postalCode":"60435","city":"Joliet","state":"IL","email":"wsappsonk6@ameblo.jp"}, +{"id":728,"firstName":"Blondie","lastName":"Godehard.sf","street":"4606 Caliangt Circle","postalCode":"20709","city":"Laurel","state":"MD"}, +{"id":729,"firstName":"Dion","lastName":"Wingeatt","street":"098 Ridgeview Alley","postalCode":"78769","city":"Austin","state":"TX","phoneNumber":"512-948-4113","email":"dwingeattk8@clickbank.net"}, +{"id":730,"firstName":"Antoni","lastName":"Tibbles","street":"9 Muir Court","postalCode":"25313","city":"Charleston","state":"WV","phoneNumber":"304-298-6149","email":"atibblesk9@usa.gov"}, +{"id":731,"firstName":"Quinn","lastName":"McKevin","street":"063 Washington Parkway","postalCode":"55470","city":"Minneapolis","state":"MN","phoneNumber":"612-140-1997"}, +{"id":732,"firstName":"Rita","lastName":"Hallam","street":"4 Chive Court","postalCode":"85025","city":"Phoenix","state":"AZ","email":"rhallamkb@list-manage.com"}, +{"id":733,"firstName":"Cliff","lastName":"McCrum","street":"30841 Scoville Street","postalCode":"38150","city":"Memphis","state":"TN","phoneNumber":"901-983-7713","email":"cmccrumkc@yellowpages.com"}, +{"id":734,"firstName":"Allyson","lastName":"Petkov","street":"057 Grover Trail","postalCode":"55487","city":"Minneapolis","state":"MN","phoneNumber":"612-706-7185"}, +{"id":735,"firstName":"Tanney","lastName":"Cicccitti","street":"84959 Calypso Way","postalCode":"66629","city":"Topeka","state":"KS","phoneNumber":"785-516-0753","email":"tcicccittike@netscape.com"}, +{"id":736,"firstName":"Brendin","lastName":"Behnke","street":"3057 Browning Parkway","postalCode":"38181","city":"Memphis","state":"TN","email":"bbehnkekf@answers.com"}, +{"id":737,"firstName":"Sydelle","lastName":"Lestor","street":"6 Old Shore Way","postalCode":"73167","city":"Oklahoma City","state":"OK"}, +{"id":738,"firstName":"Nilson","lastName":"Nelthorp","street":"5 Gerald Trail","postalCode":"60567","city":"Naperville","state":"IL","phoneNumber":"630-718-5304","email":"nnelthorpkh@scribd.com"}, +{"id":739,"firstName":"Randy","lastName":"Boller","street":"64 Roth Junction","postalCode":"95354","city":"Modesto","state":"CA","phoneNumber":"209-795-8532","email":"rbollerki@nature.com"}, +{"id":740,"firstName":"Vicki","lastName":"De Vaan","street":"08 Mariners Cove Terrace","postalCode":"62776","city":"Springfield","state":"IL","email":"vdevaankj@disqus.com"}, +{"id":741,"firstName":"Romain","lastName":"Castri","street":"7 Atwood Road","postalCode":"02905","city":"Providence","state":"RI","phoneNumber":"401-865-9950","email":"rcastrikk@google.com.br"}, +{"id":742,"firstName":"Adlai","lastName":"Keppel","street":"6 Farragut Circle","postalCode":"76705","city":"Waco","state":"TX","phoneNumber":"254-852-6322"}, +{"id":743,"firstName":"Arlyne","lastName":"Whalley","street":"6 Esker Terrace","postalCode":"83727","city":"Boise","state":"ID","email":"awhalleykm@amazon.co.uk"}, +{"id":744,"firstName":"Alistair","lastName":"Jennins","street":"6 Loeprich Center","postalCode":"21684","city":"Ridgely","state":"MD","phoneNumber":"410-494-2201","email":"ajenninskn@sciencedaily.com"}, +{"id":745,"firstName":"Farr","lastName":"Steer","street":"8569 Eliot Lane","postalCode":"93381","city":"Bakersfield","state":"CA","phoneNumber":"661-416-1609","email":"fsteerko@usgs.gov"}, +{"id":746,"firstName":"Analise","lastName":"Balasini","street":"8901 Lyons Parkway","postalCode":"23242","city":"Richmond","state":"VA","email":"abalasinikp@imgur.com"}, +{"id":747,"firstName":"Gilbert","lastName":"Lockton","street":"3 Leroy Court","postalCode":"49018","city":"Battle Creek","state":"MI","email":"glocktonkq@google.nl"}, +{"id":748,"firstName":"Hamlen","lastName":"Massie","street":"469 Mallory Drive","postalCode":"77250","city":"Houston","state":"TX","email":"hmassiekr@admin.ch"}, +{"id":749,"firstName":"Ebony","lastName":"Loker","street":"21173 Raven Point","postalCode":"21265","city":"Baltimore","state":"MD"}, +{"id":750,"firstName":"Kristina","lastName":"Deeble","street":"479 Warner Park","postalCode":"92013","city":"Carlsbad","state":"CA","phoneNumber":"760-377-7198","email":"kdeeblekt@ezinearticles.com"}, +{"id":751,"firstName":"Jabez","lastName":"Mummery","street":"1 East Point","postalCode":"52809","city":"Davenport","state":"IA","email":"jmummeryku@sfgate.com"}, +{"id":752,"firstName":"Perrine","lastName":"Aldwinckle","street":"98 Montana Avenue","postalCode":"85030","city":"Phoenix","state":"AZ","phoneNumber":"602-224-2810","email":"paldwincklekv@eepurl.com"}, +{"id":753,"firstName":"Humfried","lastName":"Pendleton","street":"843 Swallow Park","postalCode":"89115","city":"Las Vegas","state":"NV","phoneNumber":"702-524-6047"}, +{"id":754,"firstName":"Dario","lastName":"Chesshire","street":"638 Westport Place","postalCode":"96845","city":"Honolulu","state":"HI","phoneNumber":"808-718-1386"}, +{"id":755,"firstName":"Cherianne","lastName":"Hearfield","street":"15 Quincy Street","postalCode":"14233","city":"Buffalo","state":"NY","email":"chearfieldky@technorati.com"}, +{"id":756,"firstName":"Jemima","lastName":"Oxnam","street":"22276 Maple Street","postalCode":"92165","city":"San Diego","state":"CA","email":"joxnamkz@addtoany.com"}, +{"id":757,"firstName":"Tedmund","lastName":"Chandler","street":"81 Katie Point","postalCode":"44310","city":"Akron","state":"OH","phoneNumber":"330-336-2279","email":"tchandlerl0@webeden.co.uk"}, +{"id":758,"firstName":"Tobie","lastName":"Risley","street":"82996 Reindahl Junction","postalCode":"17140","city":"Harrisburg","state":"PA","phoneNumber":"717-272-9110","email":"trisleyl1@youtu.be"}, +{"id":759,"firstName":"Tomi","lastName":"Crevagh","street":"91791 Buhler Park","postalCode":"33715","city":"Saint Petersburg","state":"FL"}, +{"id":760,"firstName":"Luce","lastName":"Gwatkin","street":"424 Lunder Crossing","postalCode":"31416","city":"Savannah","state":"GA"}, +{"id":761,"firstName":"Vinita","lastName":"Hannon","street":"90 Claremont Trail","postalCode":"39236","city":"Jackson","state":"MS"}, +{"id":762,"firstName":"Ruby","lastName":"O'Cosgra","street":"304 Dayton Avenue","postalCode":"07188","city":"Newark","state":"NJ"}, +{"id":763,"firstName":"Amandi","lastName":"Vasiltsov","street":"98188 Killdeer Alley","postalCode":"93399","city":"Bakersfield","state":"CA","email":"avasiltsovl6@smh.com.au"}, +{"id":764,"firstName":"Juliana","lastName":"Goldspink","street":"93 Maryland Terrace","postalCode":"06705","city":"Waterbury","state":"CT","email":"jgoldspinkl7@guardian.co.uk"}, +{"id":765,"firstName":"Giorgi","lastName":"Yakovl","street":"24240 Shasta Drive","postalCode":"46814","city":"Fort Wayne","state":"IN","phoneNumber":"260-754-5907"}, +{"id":766,"firstName":"Aleksandr","lastName":"Justun","street":"06 Fulton Terrace","postalCode":"85025","city":"Phoenix","state":"AZ"}, +{"id":767,"firstName":"Cornela","lastName":"Grindell","street":"1 Hazelcrest Lane","postalCode":"53285","city":"Milwaukee","state":"WI"}, +{"id":768,"firstName":"Liv","lastName":"Madrell","street":"623 Cordelia Terrace","postalCode":"17105","city":"Harrisburg","state":"PA","email":"lmadrelllb@1688.com"}, +{"id":769,"firstName":"Konstance","lastName":"Rosebotham","street":"8930 Utah Terrace","postalCode":"20029","city":"Washington","state":"DC","email":"krosebothamlc@studiopress.com"}, +{"id":770,"firstName":"Theo","lastName":"Scotland","street":"454 Hintze Park","postalCode":"45238","city":"Cincinnati","state":"OH"}, +{"id":771,"firstName":"Trefor","lastName":"Rein","street":"9 Redwing Plaza","postalCode":"22184","city":"Vienna","state":"VA","email":"treinle@barnesandnoble.com"}, +{"id":772,"firstName":"Angelina","lastName":"Bromehead","street":"62477 Walton Circle","postalCode":"14683","city":"Rochester","state":"NY","email":"abromeheadlf@php.net"}, +{"id":773,"firstName":"Thornie","lastName":"Ivanishin","street":"0 Sunbrook Court","postalCode":"34665","city":"Pinellas Park","state":"FL","email":"tivanishinlg@aol.com"}, +{"id":774,"firstName":"Dyana","lastName":"McNickle","street":"2696 Lakewood Gardens Pass","postalCode":"20456","city":"Washington","state":"DC","phoneNumber":"202-653-8740"}, +{"id":775,"firstName":"Humfried","lastName":"Suero","street":"643 Pearson Junction","postalCode":"28410","city":"Wilmington","state":"NC"}, +{"id":776,"firstName":"Jessamine","lastName":"Stockings","street":"739 Moose Street","postalCode":"94137","city":"San Francisco","state":"CA","phoneNumber":"415-641-0091","email":"jstockingslj@skype.com"}, +{"id":777,"firstName":"Laryssa","lastName":"Grahl","street":"0538 Bultman Point","postalCode":"81505","city":"Grand Junction","state":"CO"}, +{"id":778,"firstName":"Susan","lastName":"Stonnell","street":"7 Dennis Parkway","postalCode":"67215","city":"Wichita","state":"KS","phoneNumber":"316-966-3243","email":"sstonnellll@nps.gov"}, +{"id":779,"firstName":"Melinde","lastName":"Segoe","street":"9 Dottie Place","postalCode":"19125","city":"Philadelphia","state":"PA","phoneNumber":"215-119-3801"}, +{"id":780,"firstName":"Skip","lastName":"Sedgebeer","street":"1 Eliot Drive","postalCode":"20005","city":"Washington","state":"DC","email":"ssedgebeerln@blogtalkradio.com"}, +{"id":781,"firstName":"Annabel","lastName":"Schusterl","street":"6094 Talisman Lane","postalCode":"68510","city":"Lincoln","state":"NE","phoneNumber":"402-355-7934","email":"aschusterllo@cargocollective.com"}, +{"id":782,"firstName":"Emiline","lastName":"Whittlesey","street":"5 Claremont Lane","postalCode":"77040","city":"Houston","state":"TX","phoneNumber":"832-835-1321","email":"ewhittleseylp@geocities.com"}, +{"id":783,"firstName":"Frasquito","lastName":"Loukes","street":"47 Merchant Pass","postalCode":"27499","city":"Greensboro","state":"NC","phoneNumber":"336-265-5719","email":"floukeslq@google.it"}, +{"id":784,"firstName":"Jerald","lastName":"Fairholm","street":"5939 Mariners Cove Road","postalCode":"76598","city":"Gatesville","state":"TX","email":"jfairholmlr@smh.com.au"}, +{"id":785,"firstName":"Melisent","lastName":"Strange","street":"50 Glendale Trail","postalCode":"10606","city":"White Plains","state":"NY"}, +{"id":786,"firstName":"Aaron","lastName":"Mixter","street":"14347 Darwin Place","postalCode":"33124","city":"Miami","state":"FL","phoneNumber":"786-244-1856","email":"amixterlt@dmoz.org"}, +{"id":787,"firstName":"Margy","lastName":"Falla","street":"5 Caliangt Trail","postalCode":"40287","city":"Louisville","state":"KY","email":"mfallalu@booking.com"}, +{"id":788,"firstName":"Malinde","lastName":"Ashdown","street":"97234 Anniversary Hill","postalCode":"06152","city":"Hartford","state":"CT","phoneNumber":"860-140-7408","email":"mashdownlv@economist.com"}, +{"id":789,"firstName":"Carolynn","lastName":"Dulany","street":"33 Melby Road","postalCode":"74116","city":"Tulsa","state":"OK","phoneNumber":"918-140-7039","email":"cdulanylw@yelp.com"}, +{"id":790,"firstName":"Kissee","lastName":"Escale","street":"1470 Hanson Parkway","postalCode":"92812","city":"Anaheim","state":"CA","phoneNumber":"714-466-6376"}, +{"id":791,"firstName":"Rebeka","lastName":"Moralee","street":"898 Oak Street","postalCode":"34108","city":"Naples","state":"FL","email":"rmoraleely@shutterfly.com"}, +{"id":792,"firstName":"Cort","lastName":"Arter","street":"35039 Menomonie Way","postalCode":"50936","city":"Des Moines","state":"IA","email":"carterlz@surveymonkey.com"}, +{"id":793,"firstName":"Kirsteni","lastName":"Heady","street":"473 Lawn Street","postalCode":"32092","city":"Saint Augustine","state":"FL","phoneNumber":"904-424-3526","email":"kheadym0@usda.gov"}, +{"id":794,"firstName":"Ettie","lastName":"Overil","street":"1085 Waubesa Lane","postalCode":"18105","city":"Allentown","state":"PA"}, +{"id":795,"firstName":"Evey","lastName":"Tesimon","street":"9 Cordelia Place","postalCode":"55127","city":"Saint Paul","state":"MN"}, +{"id":796,"firstName":"Hersh","lastName":"Lebond","street":"5265 Bartelt Park","postalCode":"34282","city":"Bradenton","state":"FL","phoneNumber":"941-114-7090"}, +{"id":797,"firstName":"Hendrika","lastName":"Govan","street":"27747 La Follette Avenue","postalCode":"21229","city":"Baltimore","state":"MD","email":"hgovanm4@cam.ac.uk"}, +{"id":798,"firstName":"Renado","lastName":"Hambly","street":"5211 Schmedeman Drive","postalCode":"68105","city":"Omaha","state":"NE","phoneNumber":"402-183-0376","email":"rhamblym5@netlog.com"}, +{"id":799,"firstName":"Brewer","lastName":"Boyn","street":"3161 Novick Lane","postalCode":"77055","city":"Houston","state":"TX","email":"bboynm6@google.it"}, +{"id":800,"firstName":"Patrick","lastName":"Speck","street":"57052 Ronald Regan Way","postalCode":"30306","city":"Atlanta","state":"GA","phoneNumber":"770-764-6971","email":"pspeckm7@live.com"}, +{"id":801,"firstName":"Skipper","lastName":"Conybear","street":"75 Autumn Leaf Alley","postalCode":"79968","city":"El Paso","state":"TX","phoneNumber":"915-705-5594","email":"sconybearm8@jimdo.com"}, +{"id":802,"firstName":"Elmore","lastName":"Quilty","street":"027 Warbler Court","postalCode":"35210","city":"Birmingham","state":"AL","email":"equiltym9@ebay.co.uk"}, +{"id":803,"firstName":"Estella","lastName":"Jorck","street":"52695 Holy Cross Trail","postalCode":"47134","city":"Jeffersonville","state":"IN","email":"ejorckma@bluehost.com"}, +{"id":804,"firstName":"Scotti","lastName":"Goodale","street":"7551 Dottie Pass","postalCode":"77713","city":"Beaumont","state":"TX","email":"sgoodalemb@nba.com"}, +{"id":805,"firstName":"Catha","lastName":"Shekle","street":"38839 Derek Terrace","postalCode":"62718","city":"Springfield","state":"IL","email":"csheklemc@tmall.com"}, +{"id":806,"firstName":"Clemens","lastName":"Chuter","street":"015 Charing Cross Pass","postalCode":"30306","city":"Atlanta","state":"GA"}, +{"id":807,"firstName":"Kiley","lastName":"Vasiltsov","street":"8 Reindahl Hill","postalCode":"33432","city":"Boca Raton","state":"FL","email":"kvasiltsovme@google.nl"}, +{"id":808,"firstName":"Korrie","lastName":"McGauhy","street":"188 Golf Lane","postalCode":"89110","city":"Las Vegas","state":"NV","phoneNumber":"702-647-1620","email":"kmcgauhymf@goodreads.com"}, +{"id":809,"firstName":"Giustina","lastName":"Hentze","street":"62244 Roth Way","postalCode":"48604","city":"Saginaw","state":"MI","email":"ghentzemg@pcworld.com"}, +{"id":810,"firstName":"Emilia","lastName":"Virgoe","street":"13910 Alpine Lane","postalCode":"33994","city":"Fort Myers","state":"FL","phoneNumber":"239-993-2041","email":"evirgoemh@mediafire.com"}, +{"id":811,"firstName":"Gordan","lastName":"Trimming","street":"38168 Transport Avenue","postalCode":"38131","city":"Memphis","state":"TN","email":"gtrimmingmi@spiegel.de"}, +{"id":812,"firstName":"Tadeo","lastName":"Vannoort","street":"41476 Pond Alley","postalCode":"20851","city":"Rockville","state":"MD","phoneNumber":"240-432-6489","email":"tvannoortmj@privacy.gov.au"}, +{"id":813,"firstName":"Joseito","lastName":"Viant","street":"1390 Kropf Court","postalCode":"04109","city":"Portland","state":"ME"}, +{"id":814,"firstName":"Blake","lastName":"Tailby","street":"5 Bultman Terrace","postalCode":"31914","city":"Columbus","state":"GA"}, +{"id":815,"firstName":"Cynthie","lastName":"Victor","street":"64 Hoard Avenue","postalCode":"46221","city":"Indianapolis","state":"IN","phoneNumber":"317-836-2511","email":"cvictormm@bizjournals.com"}, +{"id":816,"firstName":"Kristoforo","lastName":"Luckman","street":"019 Ohio Avenue","postalCode":"58505","city":"Bismarck","state":"ND","phoneNumber":"701-921-3472"}, +{"id":817,"firstName":"Celinka","lastName":"Brakewell","street":"5702 Tennessee Pass","postalCode":"92612","city":"Irvine","state":"CA","phoneNumber":"714-584-5599","email":"cbrakewellmo@house.gov"}, +{"id":818,"firstName":"Analiese","lastName":"Debenham","street":"7 Straubel Pass","postalCode":"31704","city":"Albany","state":"GA","phoneNumber":"229-600-4384","email":"adebenhammp@dell.com"}, +{"id":819,"firstName":"Sebastiano","lastName":"Eskriett","street":"0 Northridge Pass","postalCode":"34114","city":"Naples","state":"FL","phoneNumber":"239-651-1326","email":"seskriettmq@berkeley.edu"}, +{"id":820,"firstName":"Jermaine","lastName":"Donisthorpe","street":"69319 Hollow Ridge Park","postalCode":"62794","city":"Springfield","state":"IL","phoneNumber":"217-510-3030","email":"jdonisthorpemr@istockphoto.com"}, +{"id":821,"firstName":"Tera","lastName":"Smalecombe","street":"646 Oakridge Avenue","postalCode":"43699","city":"Toledo","state":"OH","email":"tsmalecombems@tripod.com"}, +{"id":822,"firstName":"Issie","lastName":"Cohane","street":"79078 Fair Oaks Circle","postalCode":"40233","city":"Louisville","state":"KY","email":"icohanemt@wired.com"}, +{"id":823,"firstName":"Nanete","lastName":"Erb","street":"02 Truax Place","postalCode":"88563","city":"El Paso","state":"TX","phoneNumber":"915-234-2792"}, +{"id":824,"firstName":"Benetta","lastName":"Roger","street":"822 Fallview Alley","postalCode":"33625","city":"Tampa","state":"FL","phoneNumber":"813-715-8911","email":"brogermv@ca.gov"}, +{"id":825,"firstName":"Sascha","lastName":"Hillyatt","street":"06 Fisk Plaza","postalCode":"11407","city":"Jamaica","state":"NY"}, +{"id":826,"firstName":"Britt","lastName":"Gilderoy","street":"64312 Delaware Place","postalCode":"89135","city":"Las Vegas","state":"NV"}, +{"id":827,"firstName":"Sterne","lastName":"Frissell","street":"69121 Sycamore Way","postalCode":"06912","city":"Stamford","state":"CT"}, +{"id":828,"firstName":"Lonny","lastName":"Petersen","street":"6 Golf Course Crossing","postalCode":"32627","city":"Gainesville","state":"FL","phoneNumber":"352-245-3289","email":"lpetersenmz@msu.edu"}, +{"id":829,"firstName":"Maridel","lastName":"Clunie","street":"0312 Dryden Street","postalCode":"80328","city":"Boulder","state":"CO","phoneNumber":"303-848-1116","email":"mclunien0@china.com.cn"}, +{"id":830,"firstName":"Annabal","lastName":"Pruckner","street":"98481 Anhalt Pass","postalCode":"30340","city":"Atlanta","state":"GA","email":"aprucknern1@bandcamp.com"}, +{"id":831,"firstName":"Carin","lastName":"Ambrois","street":"7982 Vahlen Road","postalCode":"85010","city":"Phoenix","state":"AZ"}, +{"id":832,"firstName":"Consuela","lastName":"Grubey","street":"1 Lillian Circle","postalCode":"89714","city":"Carson City","state":"NV","email":"cgrubeyn3@google.pl"}, +{"id":833,"firstName":"Friedrick","lastName":"Ventom","street":"703 Almo Crossing","postalCode":"43215","city":"Columbus","state":"OH"}, +{"id":834,"firstName":"Shalom","lastName":"Rosten","street":"4460 Parkside Road","postalCode":"37215","city":"Nashville","state":"TN","email":"srostenn5@e-recht24.de"}, +{"id":835,"firstName":"Sofia","lastName":"Pottie","street":"89885 Golf Course Junction","postalCode":"27635","city":"Raleigh","state":"NC","email":"spottien6@weather.com"}, +{"id":836,"firstName":"Ed","lastName":"Cecely","street":"38576 Gina Trail","postalCode":"85305","city":"Glendale","state":"AZ","email":"ececelyn7@friendfeed.com"}, +{"id":837,"firstName":"Ruthann","lastName":"Bignold","street":"202 Monterey Alley","postalCode":"19104","city":"Philadelphia","state":"PA","phoneNumber":"610-892-3949"}, +{"id":838,"firstName":"Vonnie","lastName":"Leeming","street":"5 Farmco Center","postalCode":"18706","city":"Wilkes Barre","state":"PA"}, +{"id":839,"firstName":"Diandra","lastName":"Gredden","street":"68178 Parkside Hill","postalCode":"89120","city":"Las Vegas","state":"NV","phoneNumber":"702-952-4026"}, +{"id":840,"firstName":"Donny","lastName":"Bruckent","street":"6 Dapin Way","postalCode":"98127","city":"Seattle","state":"WA","email":"dbruckentnb@stumbleupon.com"}, +{"id":841,"firstName":"Mill","lastName":"Finlay","street":"9 Meadow Valley Terrace","postalCode":"94405","city":"San Mateo","state":"CA","email":"mfinlaync@hibu.com"}, +{"id":842,"firstName":"Garv","lastName":"Feldberger","street":"5916 Marquette Lane","postalCode":"98127","city":"Seattle","state":"WA"}, +{"id":843,"firstName":"Micheal","lastName":"Favela","street":"41587 Dunning Road","postalCode":"47712","city":"Evansville","state":"IN"}, +{"id":844,"firstName":"Shannon","lastName":"Alvaro","street":"86377 Becker Avenue","postalCode":"33315","city":"Fort Lauderdale","state":"FL","phoneNumber":"954-661-6648","email":"salvaronf@usa.gov"}, +{"id":845,"firstName":"Corenda","lastName":"Aldcorn","street":"19 Bowman Court","postalCode":"67220","city":"Wichita","state":"KS","phoneNumber":"316-835-1638","email":"caldcornng@ebay.com"}, +{"id":846,"firstName":"Alvy","lastName":"Mahood","street":"0814 Spohn Hill","postalCode":"50347","city":"Des Moines","state":"IA","phoneNumber":"515-865-3669","email":"amahoodnh@toplist.cz"}, +{"id":847,"firstName":"Alexandr","lastName":"Stut","street":"8672 Anderson Court","postalCode":"78410","city":"Corpus Christi","state":"TX"}, +{"id":848,"firstName":"Gale","lastName":"Chaperling","street":"78873 Bellgrove Alley","postalCode":"10009","city":"New York City","state":"NY","phoneNumber":"212-978-6798","email":"gchaperlingnj@livejournal.com"}, +{"id":849,"firstName":"Eunice","lastName":"Dadson","street":"340 Dwight Hill","postalCode":"52809","city":"Davenport","state":"IA","phoneNumber":"563-787-9869","email":"edadsonnk@businessinsider.com"}, +{"id":850,"firstName":"Florentia","lastName":"Camin","street":"68733 Orin Point","postalCode":"46867","city":"Fort Wayne","state":"IN","phoneNumber":"260-920-3928","email":"fcaminnl@technorati.com"}, +{"id":851,"firstName":"Norina","lastName":"Vannacci","street":"585 Karstens Circle","postalCode":"45233","city":"Cincinnati","state":"OH"}, +{"id":852,"firstName":"Syd","lastName":"Gianolo","street":"99755 Arrowood Hill","postalCode":"33673","city":"Tampa","state":"FL","phoneNumber":"813-878-8150","email":"sgianolonn@uol.com.br"}, +{"id":853,"firstName":"Timofei","lastName":"Serle","street":"1081 Cascade Park","postalCode":"94257","city":"Sacramento","state":"CA","email":"tserleno@behance.net"}, +{"id":854,"firstName":"Moina","lastName":"Ciobutaro","street":"502 Stone Corner Circle","postalCode":"33018","city":"Hialeah","state":"FL","email":"mciobutaronp@ycombinator.com"}, +{"id":855,"firstName":"Nikolaos","lastName":"Gavaghan","street":"47136 Golf Junction","postalCode":"97255","city":"Portland","state":"OR"}, +{"id":856,"firstName":"Gallard","lastName":"Jenks","street":"2 Carioca Terrace","postalCode":"35263","city":"Birmingham","state":"AL","email":"gjenksnr@blogtalkradio.com"}, +{"id":857,"firstName":"Dare","lastName":"Nielson","street":"3 Carberry Hill","postalCode":"48604","city":"Saginaw","state":"MI","phoneNumber":"989-211-0944"}, +{"id":858,"firstName":"Cecilius","lastName":"Fasse","street":"1 Novick Street","postalCode":"68583","city":"Lincoln","state":"NE","phoneNumber":"402-342-4624","email":"cfassent@zimbio.com"}, +{"id":859,"firstName":"Kevon","lastName":"Doxsey","street":"152 Warrior Pass","postalCode":"91616","city":"North Hollywood","state":"CA","phoneNumber":"213-339-9582"}, +{"id":860,"firstName":"Matti","lastName":"Gras","street":"4567 Bunting Way","postalCode":"94544","city":"Hayward","state":"CA"}, +{"id":861,"firstName":"Nathan","lastName":"Longfut","street":"3178 Mockingbird Alley","postalCode":"97255","city":"Portland","state":"OR","phoneNumber":"971-206-3004"}, +{"id":862,"firstName":"Willetta","lastName":"Fitzpayn","street":"87 Alpine Drive","postalCode":"48604","city":"Saginaw","state":"MI","phoneNumber":"989-698-7578","email":"wfitzpaynnx@geocities.jp"}, +{"id":863,"firstName":"Emanuel","lastName":"Jikylls","street":"42 Heffernan Court","postalCode":"33884","city":"Winter Haven","state":"FL","email":"ejikyllsny@biglobe.ne.jp"}, +{"id":864,"firstName":"Lenard","lastName":"Nore","street":"7 Nevada Avenue","postalCode":"77343","city":"Huntsville","state":"TX","phoneNumber":"936-267-6742","email":"lnorenz@netscape.com"}, +{"id":865,"firstName":"Jeanine","lastName":"MacTurlough","street":"26343 Gale Crossing","postalCode":"53779","city":"Madison","state":"WI","phoneNumber":"608-865-6630","email":"jmacturlougho0@scientificamerican.com"}, +{"id":866,"firstName":"Jaquenetta","lastName":"Dorn","street":"3963 Novick Way","postalCode":"19495","city":"Valley Forge","state":"PA","email":"jdorno1@about.com"}, +{"id":867,"firstName":"Amity","lastName":"Titterrell","street":"3216 Lindbergh Court","postalCode":"90071","city":"Los Angeles","state":"CA","phoneNumber":"626-416-1494","email":"atitterrello2@psu.edu"}, +{"id":868,"firstName":"Rafaelia","lastName":"Melly","street":"6 Westridge Center","postalCode":"61825","city":"Champaign","state":"IL","email":"rmellyo3@ovh.net"}, +{"id":869,"firstName":"Cordi","lastName":"Martinovsky","street":"38 Forest Dale Terrace","postalCode":"50362","city":"Des Moines","state":"IA","email":"cmartinovskyo4@tuttocitta.it"}, +{"id":870,"firstName":"Humfrid","lastName":"Varne","street":"858 Farwell Street","postalCode":"06127","city":"West Hartford","state":"CT","email":"hvarneo5@yolasite.com"}, +{"id":871,"firstName":"Ford","lastName":"Pinchback","street":"363 Lien Pass","postalCode":"20599","city":"Washington","state":"DC","email":"fpinchbacko6@nytimes.com"}, +{"id":872,"firstName":"Maible","lastName":"Haresign","street":"809 Monica Point","postalCode":"28230","city":"Charlotte","state":"NC"}, +{"id":873,"firstName":"Rozamond","lastName":"Challis","street":"312 Mcbride Plaza","postalCode":"77266","city":"Houston","state":"TX","email":"rchalliso8@google.ca"}, +{"id":874,"firstName":"Myrah","lastName":"Menendez","street":"21 Garrison Plaza","postalCode":"23208","city":"Richmond","state":"VA","email":"mmenendezo9@msn.com"}, +{"id":875,"firstName":"Roberto","lastName":"Lamb","street":"3339 Cottonwood Pass","postalCode":"43699","city":"Toledo","state":"OH","phoneNumber":"419-633-9671"}, +{"id":876,"firstName":"Foster","lastName":"Delyth","street":"91500 Carpenter Point","postalCode":"79928","city":"El Paso","state":"TX","phoneNumber":"915-782-9005"}, +{"id":877,"firstName":"Nicholle","lastName":"Pickring","street":"8083 Talmadge Lane","postalCode":"14624","city":"Rochester","state":"NY","email":"npickringoc@tuttocitta.it"}, +{"id":878,"firstName":"Theodosia","lastName":"Bayliss","street":"6 Marcy Parkway","postalCode":"33954","city":"Port Charlotte","state":"FL"}, +{"id":879,"firstName":"Araldo","lastName":"Dowzell","street":"8376 Carpenter Court","postalCode":"71151","city":"Shreveport","state":"LA","email":"adowzelloe@army.mil"}, +{"id":880,"firstName":"Hugues","lastName":"McColgan","street":"990 Southridge Point","postalCode":"93591","city":"Palmdale","state":"CA","phoneNumber":"661-978-2646","email":"hmccolganof@netvibes.com"}, +{"id":881,"firstName":"Annissa","lastName":"Mordue","street":"62114 Ludington Lane","postalCode":"30911","city":"Augusta","state":"GA","phoneNumber":"706-152-3967","email":"amordueog@tripod.com"}, +{"id":882,"firstName":"Tierney","lastName":"Claughton","street":"3 Twin Pines Trail","postalCode":"88563","city":"El Paso","state":"TX","phoneNumber":"915-784-7980"}, +{"id":883,"firstName":"Rey","lastName":"Fleckno","street":"49 Oakridge Point","postalCode":"27605","city":"Raleigh","state":"NC"}, +{"id":884,"firstName":"Stacee","lastName":"Rewcastle","street":"19 Glendale Point","postalCode":"78278","city":"San Antonio","state":"TX","phoneNumber":"210-454-3087","email":"srewcastleoj@ustream.tv"}, +{"id":885,"firstName":"Delano","lastName":"Bragger","street":"0 Hoffman Center","postalCode":"47725","city":"Evansville","state":"IN","email":"dbraggerok@ifeng.com"}, +{"id":886,"firstName":"Redford","lastName":"Bare","street":"801 Garrison Court","postalCode":"08638","city":"Trenton","state":"NJ"}, +{"id":887,"firstName":"Grantham","lastName":"Arlidge","street":"69 Shelley Parkway","postalCode":"34210","city":"Bradenton","state":"FL","email":"garlidgeom@google.nl"}, +{"id":888,"firstName":"Debbie","lastName":"Tommaseo","street":"295 Crowley Alley","postalCode":"98516","city":"Olympia","state":"WA","email":"dtommaseoon@xrea.com"}, +{"id":889,"firstName":"Ragnar","lastName":"O' Byrne","street":"88163 Manitowish Terrace","postalCode":"20260","city":"Washington","state":"DC","phoneNumber":"202-982-3050","email":"robyrneoo@ft.com"}, +{"id":890,"firstName":"Leopold","lastName":"Woodington","street":"44 Vera Pass","postalCode":"24009","city":"Roanoke","state":"VA","email":"lwoodingtonop@engadget.com"}, +{"id":891,"firstName":"Farrah","lastName":"Conniam","street":"2078 Bunting Parkway","postalCode":"68134","city":"Omaha","state":"NE","email":"fconniamoq@github.com"}, +{"id":892,"firstName":"Augustus","lastName":"Morrish","street":"430 Sauthoff Plaza","postalCode":"27710","city":"Durham","state":"NC","phoneNumber":"919-266-8155","email":"amorrishor@naver.com"}, +{"id":893,"firstName":"Cassaundra","lastName":"Deaves","street":"32 Clarendon Way","postalCode":"40266","city":"Louisville","state":"KY","phoneNumber":"502-138-7158"}, +{"id":894,"firstName":"Glynn","lastName":"Shewan","street":"989 Susan Avenue","postalCode":"95194","city":"San Jose","state":"CA","email":"gshewanot@reuters.com"}, +{"id":895,"firstName":"Neils","lastName":"Niesing","street":"488 Jana Road","postalCode":"48232","city":"Detroit","state":"MI","email":"nniesingou@cafepress.com"}, +{"id":896,"firstName":"Alix","lastName":"Cleeton","street":"8 Merrick Crossing","postalCode":"18018","city":"Bethlehem","state":"PA","email":"acleetonov@ask.com"}, +{"id":897,"firstName":"Kyrstin","lastName":"Alejandro","street":"45487 Carey Way","postalCode":"37919","city":"Knoxville","state":"TN","email":"kalejandroow@scribd.com"}, +{"id":898,"firstName":"Waylin","lastName":"De Caroli","street":"9237 Ludington Plaza","postalCode":"77554","city":"Galveston","state":"TX","email":"wdecaroliox@washingtonpost.com"}, +{"id":899,"firstName":"Lian","lastName":"Brade","street":"704 Lotheville Drive","postalCode":"24014","city":"Roanoke","state":"VA","phoneNumber":"540-712-7147"}, +{"id":900,"firstName":"Griz","lastName":"Elgie","street":"435 Northridge Point","postalCode":"93399","city":"Bakersfield","state":"CA","email":"gelgieoz@hao123.com"}, +{"id":901,"firstName":"Georgeanna","lastName":"Gilberthorpe","street":"6 Tomscot Park","postalCode":"37931","city":"Knoxville","state":"TN","phoneNumber":"865-664-6191","email":"ggilberthorpep0@typepad.com"}, +{"id":902,"firstName":"Korrie","lastName":"Goldstraw","street":"00 Lindbergh Plaza","postalCode":"14225","city":"Buffalo","state":"NY","email":"kgoldstrawp1@yellowbook.com"}, +{"id":903,"firstName":"Hervey","lastName":"Wyse","street":"27 Buell Road","postalCode":"75044","city":"Garland","state":"TX","phoneNumber":"972-243-9031","email":"hwysep2@deliciousdays.com"}, +{"id":904,"firstName":"Georgeta","lastName":"Buckam","street":"0 Continental Hill","postalCode":"65810","city":"Springfield","state":"MO","phoneNumber":"417-682-2553","email":"gbuckamp3@java.com"}, +{"id":905,"firstName":"Hussein","lastName":"Jacson","street":"478 Vermont Court","postalCode":"95354","city":"Modesto","state":"CA","phoneNumber":"209-714-7362","email":"hjacsonp4@squarespace.com"}, +{"id":906,"firstName":"Chrysler","lastName":"Heddy","street":"913 Steensland Parkway","postalCode":"20709","city":"Laurel","state":"MD","phoneNumber":"410-691-9748"}, +{"id":907,"firstName":"Jourdan","lastName":"Frise","street":"35 Erie Point","postalCode":"94245","city":"Sacramento","state":"CA","email":"jfrisep6@eepurl.com"}, +{"id":908,"firstName":"Roxie","lastName":"Gimber","street":"9237 Vermont Pass","postalCode":"88553","city":"El Paso","state":"TX","email":"rgimberp7@mayoclinic.com"}, +{"id":909,"firstName":"Jenilee","lastName":"MacNab","street":"23 Union Alley","postalCode":"29579","city":"Myrtle Beach","state":"SC","email":"jmacnabp8@mit.edu"}, +{"id":910,"firstName":"Lola","lastName":"Bier","street":"371 Bartillon Avenue","postalCode":"71105","city":"Shreveport","state":"LA","phoneNumber":"318-818-1659","email":"lbierp9@goo.gl"}, +{"id":911,"firstName":"Fayina","lastName":"Brosel","street":"3255 Macpherson Pass","postalCode":"55166","city":"Saint Paul","state":"MN","email":"fbroselpa@rakuten.co.jp"}, +{"id":912,"firstName":"Ellerey","lastName":"Darell","street":"735 Leroy Road","postalCode":"07544","city":"Paterson","state":"NJ"}, +{"id":913,"firstName":"Lorianne","lastName":"McLanachan","street":"22 Alpine Point","postalCode":"77293","city":"Houston","state":"TX","email":"lmclanachanpc@dmoz.org"}, +{"id":914,"firstName":"Merrill","lastName":"Searson","street":"8447 Namekagon Hill","postalCode":"55114","city":"Saint Paul","state":"MN","phoneNumber":"651-567-8380","email":"msearsonpd@census.gov"}, +{"id":915,"firstName":"Nisse","lastName":"Larive","street":"976 Forest Dale Way","postalCode":"10004","city":"New York City","state":"NY","phoneNumber":"347-192-6897","email":"nlarivepe@drupal.org"}, +{"id":916,"firstName":"Cazzie","lastName":"Brenard","street":"647 Gulseth Plaza","postalCode":"02283","city":"Boston","state":"MA","phoneNumber":"781-248-3572","email":"cbrenardpf@uiuc.edu"}, +{"id":917,"firstName":"Gael","lastName":"Ramirez","street":"161 Basil Terrace","postalCode":"93786","city":"Fresno","state":"CA","phoneNumber":"559-692-2653","email":"gramirezpg@ucoz.ru"}, +{"id":918,"firstName":"Culver","lastName":"Le Brun","street":"73906 Muir Terrace","postalCode":"95973","city":"Chico","state":"CA","email":"clebrunph@jigsy.com"}, +{"id":919,"firstName":"Bordie","lastName":"Muskett","street":"27 Nobel Trail","postalCode":"20599","city":"Washington","state":"DC","phoneNumber":"202-872-5253"}, +{"id":920,"firstName":"Riccardo","lastName":"Miskin","street":"778 Eagan Place","postalCode":"55407","city":"Minneapolis","state":"MN","email":"rmiskinpj@slideshare.net"}, +{"id":921,"firstName":"Cristabel","lastName":"Gowlett","street":"5 Quincy Lane","postalCode":"62525","city":"Decatur","state":"IL","email":"cgowlettpk@cafepress.com"}, +{"id":922,"firstName":"Crawford","lastName":"Huby","street":"6 Gina Lane","postalCode":"94913","city":"San Rafael","state":"CA","phoneNumber":"415-133-8552","email":"chubypl@jugem.jp"}, +{"id":923,"firstName":"Cherish","lastName":"Mutch","street":"8 Oak Valley Lane","postalCode":"20719","city":"Bowie","state":"MD","phoneNumber":"240-982-9087"}, +{"id":924,"firstName":"Jerrie","lastName":"Latek","street":"9462 Moulton Terrace","postalCode":"52809","city":"Davenport","state":"IA","phoneNumber":"563-687-6664","email":"jlatekpn@gov.uk"}, +{"id":925,"firstName":"Lacey","lastName":"Maris","street":"1 Carpenter Hill","postalCode":"61605","city":"Peoria","state":"IL","phoneNumber":"309-570-3216"}, +{"id":926,"firstName":"Daffy","lastName":"Binion","street":"8 Milwaukee Parkway","postalCode":"33129","city":"Miami","state":"FL","phoneNumber":"305-579-9009"}, +{"id":927,"firstName":"Melita","lastName":"Valde","street":"629 Packers Crossing","postalCode":"06140","city":"Hartford","state":"CT","phoneNumber":"860-747-5927","email":"mvaldepq@storify.com"}, +{"id":928,"firstName":"Cherlyn","lastName":"Rosenshine","street":"764 Pepper Wood Place","postalCode":"72204","city":"Little Rock","state":"AR","phoneNumber":"501-823-8134"}, +{"id":929,"firstName":"Morty","lastName":"Stanger","street":"3286 Charing Cross Court","postalCode":"08603","city":"Trenton","state":"NJ","email":"mstangerps@yellowpages.com"}, +{"id":930,"firstName":"Bernete","lastName":"Hirth","street":"83 Granby Center","postalCode":"95194","city":"San Jose","state":"CA","phoneNumber":"408-738-2333","email":"bhirthpt@people.com.cn"}, +{"id":931,"firstName":"Elena","lastName":"Wace","street":"98 Grover Trail","postalCode":"33742","city":"Saint Petersburg","state":"FL","phoneNumber":"727-883-2239","email":"ewacepu@merriam-webster.com"}, +{"id":932,"firstName":"Giselbert","lastName":"Sisland","street":"2214 Sheridan Pass","postalCode":"40225","city":"Louisville","state":"KY"}, +{"id":933,"firstName":"Herb","lastName":"Voyce","street":"628 Basil Pass","postalCode":"21265","city":"Baltimore","state":"MD"}, +{"id":934,"firstName":"Vina","lastName":"Antonetti","street":"6 Springview Terrace","postalCode":"20430","city":"Washington","state":"DC","phoneNumber":"202-955-4578"}, +{"id":935,"firstName":"Bard","lastName":"De Avenell","street":"2775 Clarendon Avenue","postalCode":"53215","city":"Milwaukee","state":"WI"}, +{"id":936,"firstName":"Briana","lastName":"Pinshon","street":"43 Del Sol Street","postalCode":"33615","city":"Tampa","state":"FL","email":"bpinshonpz@java.com"}, +{"id":937,"firstName":"Hilly","lastName":"Aysh","street":"37 Doe Crossing Terrace","postalCode":"23705","city":"Portsmouth","state":"VA","phoneNumber":"757-992-8124"}, +{"id":938,"firstName":"Marylin","lastName":"Ciotto","street":"3957 Browning Pass","postalCode":"94807","city":"Richmond","state":"CA"}, +{"id":939,"firstName":"Cam","lastName":"Kurth","street":"155 Walton Point","postalCode":"92867","city":"Orange","state":"CA","phoneNumber":"949-955-2248"}, +{"id":940,"firstName":"Rawley","lastName":"Bickle","street":"54 Macpherson Point","postalCode":"93762","city":"Fresno","state":"CA","phoneNumber":"559-331-2187","email":"rbickleq3@delicious.com"}, +{"id":941,"firstName":"Merlina","lastName":"Dunster","street":"70557 Toban Trail","postalCode":"20005","city":"Washington","state":"DC","phoneNumber":"202-999-8731"}, +{"id":942,"firstName":"Kennie","lastName":"MacCoughan","street":"04566 Browning Parkway","postalCode":"75507","city":"Texarkana","state":"TX","phoneNumber":"903-622-7509","email":"kmaccoughanq5@reuters.com"}, +{"id":943,"firstName":"Jase","lastName":"Cholomin","street":"21497 Blaine Road","postalCode":"33777","city":"Largo","state":"FL","email":"jcholominq6@cocolog-nifty.com"}, +{"id":944,"firstName":"Cirstoforo","lastName":"Billingsley","street":"1306 Summer Ridge Court","postalCode":"02124","city":"Boston","state":"MA","email":"cbillingsleyq7@google.es"}, +{"id":945,"firstName":"Berkly","lastName":"Lawles","street":"80400 Milwaukee Way","postalCode":"64082","city":"Lees Summit","state":"MO","email":"blawlesq8@jiathis.com"}, +{"id":946,"firstName":"Otha","lastName":"Key","street":"59639 Center Circle","postalCode":"35405","city":"Tuscaloosa","state":"AL","email":"okeyq9@deliciousdays.com"}, +{"id":947,"firstName":"Anselma","lastName":"Debow","street":"5 Spohn Parkway","postalCode":"80241","city":"Denver","state":"CO","email":"adebowqa@yelp.com"}, +{"id":948,"firstName":"Auria","lastName":"Beric","street":"5 Anderson Way","postalCode":"20022","city":"Washington","state":"DC","email":"abericqb@a8.net"}, +{"id":949,"firstName":"Eirena","lastName":"Caswall","street":"4648 Fulton Street","postalCode":"64054","city":"Independence","state":"MO","phoneNumber":"816-406-0779","email":"ecaswallqc@i2i.jp"}, +{"id":950,"firstName":"Tracy","lastName":"Sperwell","street":"4 Heath Drive","postalCode":"91499","city":"Van Nuys","state":"CA"}, +{"id":951,"firstName":"Cherilyn","lastName":"Faint","street":"814 Anniversary Lane","postalCode":"24503","city":"Lynchburg","state":"VA","phoneNumber":"434-722-2344","email":"cfaintqe@amazon.de"}, +{"id":952,"firstName":"Sela","lastName":"Darcey","street":"002 Walton Hill","postalCode":"78703","city":"Austin","state":"TX","email":"sdarceyqf@lycos.com"}, +{"id":953,"firstName":"Freddie","lastName":"Klagge","street":"842 Schlimgen Road","postalCode":"29905","city":"Beaufort","state":"SC","email":"fklaggeqg@1und1.de"}, +{"id":954,"firstName":"Eunice","lastName":"Walrond","street":"4 Mifflin Terrace","postalCode":"68117","city":"Omaha","state":"NE","email":"ewalrondqh@arstechnica.com"}, +{"id":955,"firstName":"Adelbert","lastName":"Meuse","street":"971 Doe Crossing Court","postalCode":"27157","city":"Winston Salem","state":"NC"}, +{"id":956,"firstName":"Caitlin","lastName":"Windham","street":"29 Cordelia Alley","postalCode":"76210","city":"Denton","state":"TX","phoneNumber":"214-498-2801","email":"cwindhamqj@trellian.com"}, +{"id":957,"firstName":"Jere","lastName":"Presho","street":"7 Monica Plaza","postalCode":"75710","city":"Tyler","state":"TX","email":"jpreshoqk@e-recht24.de"}, +{"id":958,"firstName":"Lonny","lastName":"Cotter","street":"5686 Rutledge Place","postalCode":"40596","city":"Lexington","state":"KY","email":"lcotterql@last.fm"}, +{"id":959,"firstName":"Sarah","lastName":"Earnshaw","street":"69 Prentice Point","postalCode":"60669","city":"Chicago","state":"IL","email":"searnshawqm@ycombinator.com"}, +{"id":960,"firstName":"Claire","lastName":"Minette","street":"3145 Butterfield Terrace","postalCode":"43204","city":"Columbus","state":"OH","phoneNumber":"614-157-5341","email":"cminetteqn@upenn.edu"}, +{"id":961,"firstName":"Traci","lastName":"Farnes","street":"2 Service Circle","postalCode":"06905","city":"Stamford","state":"CT","phoneNumber":"203-311-5859","email":"tfarnesqo@merriam-webster.com"}, +{"id":962,"firstName":"Storm","lastName":"de Werk","street":"9 Jenifer Alley","postalCode":"98121","city":"Seattle","state":"WA","phoneNumber":"425-172-3688"}, +{"id":963,"firstName":"Neile","lastName":"Mackrill","street":"5046 Schurz Point","postalCode":"28299","city":"Charlotte","state":"NC"}, +{"id":964,"firstName":"Temple","lastName":"Howlings","street":"8831 Randy Street","postalCode":"71161","city":"Shreveport","state":"LA","phoneNumber":"318-859-6319","email":"thowlingsqr@smugmug.com"}, +{"id":965,"firstName":"Roda","lastName":"Drissell","street":"16621 Mandrake Lane","postalCode":"78744","city":"Austin","state":"TX","email":"rdrissellqs@mayoclinic.com"}, +{"id":966,"firstName":"Francoise","lastName":"Lawman","street":"7 Calypso Point","postalCode":"14614","city":"Rochester","state":"NY","phoneNumber":"585-995-3882"}, +{"id":967,"firstName":"Helen","lastName":"Kigelman","street":"613 Manley Plaza","postalCode":"01905","city":"Lynn","state":"MA","email":"hkigelmanqu@shutterfly.com"}, +{"id":968,"firstName":"Dudley","lastName":"Cansdall","street":"153 Schmedeman Place","postalCode":"93715","city":"Fresno","state":"CA","email":"dcansdallqv@naver.com"}, +{"id":969,"firstName":"Shelby","lastName":"Fayers","street":"94681 Knutson Point","postalCode":"10039","city":"New York City","state":"NY"}, +{"id":970,"firstName":"Sileas","lastName":"Jalland","street":"2199 Buhler Circle","postalCode":"10029","city":"New York City","state":"NY","phoneNumber":"917-902-1667","email":"sjallandqx@rakuten.co.jp"}, +{"id":971,"firstName":"Zeke","lastName":"Duffett","street":"5 Coolidge Park","postalCode":"37995","city":"Knoxville","state":"TN","phoneNumber":"865-814-8540","email":"zduffettqy@wikispaces.com"}, +{"id":972,"firstName":"Tabby","lastName":"Mathieu","street":"78 Donald Circle","postalCode":"55114","city":"Saint Paul","state":"MN","email":"tmathieuqz@rediff.com"}, +{"id":973,"firstName":"Zsa zsa","lastName":"Knights","street":"208 Kingsford Park","postalCode":"15250","city":"Pittsburgh","state":"PA","phoneNumber":"412-652-8956","email":"zknightsr0@privacy.gov.au"}, +{"id":974,"firstName":"Tildi","lastName":"Knewstub","street":"8572 Gina Hill","postalCode":"32909","city":"Palm Bay","state":"FL","email":"tknewstubr1@archive.org"}, +{"id":975,"firstName":"Eric","lastName":"Wharrier","street":"9 Marcy Alley","postalCode":"38126","city":"Memphis","state":"TN","phoneNumber":"901-378-1545","email":"ewharrierr2@people.com.cn"}, +{"id":976,"firstName":"Jilleen","lastName":"Durgan","street":"7 Lien Plaza","postalCode":"75241","city":"Dallas","state":"TX","email":"jdurganr3@google.pl"}, +{"id":977,"firstName":"Ingeberg","lastName":"Whipp","street":"489 Bartillon Street","postalCode":"22205","city":"Arlington","state":"VA","phoneNumber":"703-356-7728","email":"iwhippr4@un.org"}, +{"id":978,"firstName":"Drake","lastName":"McCreagh","street":"735 Mcguire Lane","postalCode":"20530","city":"Washington","state":"DC","email":"dmccreaghr5@mediafire.com"}, +{"id":979,"firstName":"Byron","lastName":"Eades","street":"931 Hollow Ridge Avenue","postalCode":"23285","city":"Richmond","state":"VA","phoneNumber":"804-728-5669","email":"beadesr6@npr.org"}, +{"id":980,"firstName":"Free","lastName":"Tungate","street":"7037 Ramsey Crossing","postalCode":"64153","city":"Kansas City","state":"MO","email":"ftungater7@macromedia.com"}, +{"id":981,"firstName":"Augustus","lastName":"Benardet","street":"398 Bultman Circle","postalCode":"70165","city":"New Orleans","state":"LA"}, +{"id":982,"firstName":"Sanders","lastName":"Sullens","street":"75785 Westend Terrace","postalCode":"43656","city":"Toledo","state":"OH","phoneNumber":"419-314-1134"}, +{"id":983,"firstName":"Ynes","lastName":"Troup","street":"328 Schurz Trail","postalCode":"98907","city":"Yakima","state":"WA","phoneNumber":"509-696-5645"}, +{"id":984,"firstName":"Siana","lastName":"Bernath","street":"968 Sommers Lane","postalCode":"55487","city":"Minneapolis","state":"MN","phoneNumber":"612-351-3016"}, +{"id":985,"firstName":"Ellary","lastName":"Enders","street":"2 Charing Cross Court","postalCode":"06505","city":"New Haven","state":"CT","phoneNumber":"203-608-5058"}, +{"id":986,"firstName":"Mariann","lastName":"Damerell","street":"885 Pennsylvania Crossing","postalCode":"15220","city":"Pittsburgh","state":"PA","phoneNumber":"412-667-1349","email":"mdamerellrd@moonfruit.com"}, +{"id":987,"firstName":"Timotheus","lastName":"Muncer","street":"293 Hoepker Center","postalCode":"32405","city":"Panama City","state":"FL","phoneNumber":"850-740-2501","email":"tmuncerre@ifeng.com"}, +{"id":988,"firstName":"Hermina","lastName":"Tetsall","street":"9354 Nobel Road","postalCode":"55585","city":"Monticello","state":"MN","phoneNumber":"763-292-3970","email":"htetsallrf@wsj.com"}, +{"id":989,"firstName":"Dorelia","lastName":"Howship","street":"747 Namekagon Way","postalCode":"14269","city":"Buffalo","state":"NY","phoneNumber":"716-470-3584","email":"dhowshiprg@un.org"}, +{"id":990,"firstName":"Peggy","lastName":"Coutts","street":"34 Village Green Road","postalCode":"19131","city":"Philadelphia","state":"PA"}, +{"id":991,"firstName":"Dacey","lastName":"Inglefield","street":"05227 Buell Avenue","postalCode":"45414","city":"Dayton","state":"OH"}, +{"id":992,"firstName":"Hollyanne","lastName":"Hobbema","street":"684 La Follette Drive","postalCode":"45218","city":"Cincinnati","state":"OH","phoneNumber":"513-346-0258"}, +{"id":993,"firstName":"Freedman","lastName":"Whorlow","street":"291 Maywood Pass","postalCode":"48098","city":"Troy","state":"MI","phoneNumber":"248-890-5937"}, +{"id":994,"firstName":"Karine","lastName":"Gerring","street":"163 Graceland Street","postalCode":"95397","city":"Modesto","state":"CA"}, +{"id":995,"firstName":"Sonya","lastName":"Giercke","street":"1801 Rowland Junction","postalCode":"66215","city":"Shawnee Mission","state":"KS","email":"sgierckerm@mapquest.com"}, +{"id":996,"firstName":"Fabiano","lastName":"O'Hear","street":"87555 Sunnyside Plaza","postalCode":"33330","city":"Fort Lauderdale","state":"FL","email":"fohearrn@china.com.cn"}, +{"id":997,"firstName":"Lelia","lastName":"Gillman","street":"29838 Eagan Junction","postalCode":"78783","city":"Austin","state":"TX","phoneNumber":"512-515-1461","email":"lgillmanro@amazon.co.jp"}, +{"id":998,"firstName":"Ophelie","lastName":"Richardet","street":"9 Bay Point","postalCode":"94042","city":"Mountain View","state":"CA"}, +{"id":999,"firstName":"Batholomew","lastName":"Janzen","street":"9 Rigney Alley","postalCode":"95113","city":"San Jose","state":"CA"}, +{"id":1000,"firstName":"Kirstyn","lastName":"Bixley","street":"2 Cascade Trail","postalCode":"80015","city":"Aurora","state":"CO","phoneNumber":"303-339-2309","email":"kbixleyrr@i2i.jp"}] \ No newline at end of file diff --git a/json-modules/json-2/src/test/resources/sample_input.json b/json-modules/json-2/src/test/resources/sample_input.json new file mode 100644 index 000000000000..b6e90da357af --- /dev/null +++ b/json-modules/json-2/src/test/resources/sample_input.json @@ -0,0 +1,13 @@ +{ + "name": "Baeldung", + "area": "tech blogs", + "author": "Eugen", + "id": 32134, + "salary": 70000, + "topics": [ + "java", + "kotlin", + "cs", + "linux" + ] +} \ No newline at end of file diff --git a/json-modules/pom.xml b/json-modules/pom.xml index 66994f1f8673..b7d75d6eef92 100644 --- a/json-modules/pom.xml +++ b/json-modules/pom.xml @@ -16,6 +16,7 @@ json + json-2 diff --git a/pom.xml b/pom.xml index bc60a0397331..96e9f971d1f3 100644 --- a/pom.xml +++ b/pom.xml @@ -448,7 +448,6 @@ jooby jsf json-modules - json-2 json-path jsoup kubernetes @@ -888,7 +887,6 @@ jooby jsf json-modules - json-2 json-path jsoup From 289644f06a8abe913d41faf433c697beb1f541b2 Mon Sep 17 00:00:00 2001 From: panagiotiskakos Date: Thu, 23 Jun 2022 08:59:37 +0300 Subject: [PATCH 4/7] moved json-path(submodule) to json-modules(parent) --- json-modules/json-path/.gitignore | 13 +++ json-modules/json-path/README.md | 8 ++ json-modules/json-path/pom.xml | 30 ++++++ .../src/main/resources/intro_api.json | 57 ++++++++++ .../src/main/resources/intro_service.json | 61 +++++++++++ .../src/main/resources/intro_user.json | 46 ++++++++ .../json-path/src/main/resources/logback.xml | 13 +++ .../src/main/resources/online_store.json | 23 ++++ .../introduction/JsonPathUnitTest.java | 46 ++++++++ .../OperationIntegrationTest.java | 74 +++++++++++++ .../introduction/ServiceIntegrationTest.java | 101 ++++++++++++++++++ .../json-path/src/test/resources/logback.xml | 19 ++++ json-modules/pom.xml | 1 + pom.xml | 2 - 14 files changed, 492 insertions(+), 2 deletions(-) create mode 100644 json-modules/json-path/.gitignore create mode 100644 json-modules/json-path/README.md create mode 100644 json-modules/json-path/pom.xml create mode 100644 json-modules/json-path/src/main/resources/intro_api.json create mode 100644 json-modules/json-path/src/main/resources/intro_service.json create mode 100644 json-modules/json-path/src/main/resources/intro_user.json create mode 100644 json-modules/json-path/src/main/resources/logback.xml create mode 100644 json-modules/json-path/src/main/resources/online_store.json create mode 100644 json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java create mode 100644 json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java create mode 100644 json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java create mode 100644 json-modules/json-path/src/test/resources/logback.xml diff --git a/json-modules/json-path/.gitignore b/json-modules/json-path/.gitignore new file mode 100644 index 000000000000..83c05e60c802 --- /dev/null +++ b/json-modules/json-path/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/json-modules/json-path/README.md b/json-modules/json-path/README.md new file mode 100644 index 000000000000..e3f81e827bc7 --- /dev/null +++ b/json-modules/json-path/README.md @@ -0,0 +1,8 @@ +## JsonPath + +This module contains articles about JsonPath. + +### Relevant articles: + +- [Introduction to JsonPath](https://www.baeldung.com/guide-to-jayway-jsonpath) +- [Count with JsonPath](https://www.baeldung.com/jsonpath-count) diff --git a/json-modules/json-path/pom.xml b/json-modules/json-path/pom.xml new file mode 100644 index 000000000000..e467ee9557b7 --- /dev/null +++ b/json-modules/json-path/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + json-path + 0.0.1-SNAPSHOT + json-path + + + com.baeldung + json-modules + 1.0.0-SNAPSHOT + + + + + + com.jayway.jsonpath + json-path + ${json-path.version} + + + + + + 2.4.0 + + + \ No newline at end of file diff --git a/json-modules/json-path/src/main/resources/intro_api.json b/json-modules/json-path/src/main/resources/intro_api.json new file mode 100644 index 000000000000..8a252f2971f5 --- /dev/null +++ b/json-modules/json-path/src/main/resources/intro_api.json @@ -0,0 +1,57 @@ +{ + "tool": + { + "jsonpath": + { + "creator": + { + "name": "Jayway Inc.", + "location": + [ + "Malmo", + "Stockholm", + "Copenhagen", + "San Francisco", + "Karlskrona", + "Halmstad", + "Helsingborg" + ] + }, + + "current release": "2.1" + } + }, + + "book": + [ + { + "title": "Beginning JSON", + "author": "Ben Smith", + "price": 49.99 + }, + + { + "title": "JSON at Work", + "author": "Tom Marrs", + "price": 29.99 + }, + + { + "title": "Learn JSON in a DAY", + "author": "Acodemy", + "price": 8.99 + }, + + { + "title": "JSON: Questions and Answers", + "author": "George Duckett", + "price": 6.00 + } + ], + + "price range": + { + "cheap": 10.00, + "medium": 20.00 + } +} \ No newline at end of file diff --git a/json-modules/json-path/src/main/resources/intro_service.json b/json-modules/json-path/src/main/resources/intro_service.json new file mode 100644 index 000000000000..448492463a29 --- /dev/null +++ b/json-modules/json-path/src/main/resources/intro_service.json @@ -0,0 +1,61 @@ +[ + { + "id": 1, + "title": "Casino Royale", + "director": "Martin Campbell", + "starring": + [ + "Daniel Craig", + "Eva Green" + ], + + "desc": "Twenty-first James Bond movie", + "release date": 1163466000000, + "box office": 594275385 + }, + + { + "id": 2, + "title": "Quantum of Solace", + "director": "Marc Forster", + "starring": + [ + "Daniel Craig", + "Olga Kurylenko" + ], + + "desc": "Twenty-second James Bond movie", + "release date": 1225242000000, + "box office": 591692078 + }, + + { + "id": 3, + "title": "Skyfall", + "director": "Sam Mendes", + "starring": + [ + "Daniel Craig", + "Naomie Harris" + ], + + "desc": "Twenty-third James Bond movie", + "release date": 1350954000000, + "box office": 1110526981 + }, + + { + "id": 4, + "title": "Spectre", + "director": "Sam Mendes", + "starring": + [ + "Daniel Craig", + "Lea Seydoux" + ], + + "desc": "Twenty-fourth James Bond movie", + "release date": 1445821200000, + "box office": 879376275 + } +] \ No newline at end of file diff --git a/json-modules/json-path/src/main/resources/intro_user.json b/json-modules/json-path/src/main/resources/intro_user.json new file mode 100644 index 000000000000..c35914c6c4d1 --- /dev/null +++ b/json-modules/json-path/src/main/resources/intro_user.json @@ -0,0 +1,46 @@ +[ + { + "username": "oracle", + "password": + { + "current": + { + "value": "Java_SE_8", + "created": 1397754000000 + }, + + "old": + [ + { + "value": "Java_SE_7", + "created": 1312650000000 + } + ] + } + }, + + { + "username": "sun", + "password": + { + "current": + { + "value": "Java_SE_6", + "created": 1168448400000 + }, + + "old": + [ + { + "value": "J2SE_5.0", + "created": 1099069200000 + }, + + { + "value": "J2SE_1.4", + "created": 1025542800000 + } + ] + } + } +] \ No newline at end of file diff --git a/json-modules/json-path/src/main/resources/logback.xml b/json-modules/json-path/src/main/resources/logback.xml new file mode 100644 index 000000000000..7d900d8ea884 --- /dev/null +++ b/json-modules/json-path/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/json-modules/json-path/src/main/resources/online_store.json b/json-modules/json-path/src/main/resources/online_store.json new file mode 100644 index 000000000000..2b271a11246f --- /dev/null +++ b/json-modules/json-path/src/main/resources/online_store.json @@ -0,0 +1,23 @@ +{ + "items":{ + "book":[ + { + "author":"Arthur Conan Doyle", + "title":"Sherlock Holmes", + "price":8.99 + }, + { + "author":"J. R. R. Tolkien", + "title":"The Lord of the Rings", + "isbn":"0-395-19395-8", + "price":22.99 + } + ], + "bicycle":{ + "color":"red", + "price":19.95 + } + }, + "url":"mystore.com", + "owner":"baeldung" +} \ No newline at end of file diff --git a/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java b/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java new file mode 100644 index 000000000000..9ffe027b6f8a --- /dev/null +++ b/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.jsonpath.introduction; + +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.Map; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.jayway.jsonpath.JsonPath; + +import net.minidev.json.JSONArray; + +public class JsonPathUnitTest { + + private static String json; + private static File jsonFile = new File("src/main/resources/online_store.json"); + + private static String readFile(File file, Charset charset) throws IOException { + return new String(Files.readAllBytes(file.toPath()), charset); + } + + @BeforeClass + public static void init() throws IOException { + json = readFile(jsonFile, StandardCharsets.UTF_8); + } + + @Test + public void shouldMatchCountOfObjects() { + Map objectMap = JsonPath.read(json, "$"); + assertEquals(3, objectMap.keySet() + .size()); + } + + @Test + public void shouldMatchCountOfArrays() { + JSONArray jsonArray = JsonPath.read(json, "$.items.book[*]"); + assertEquals(2, jsonArray.size()); + } + +} diff --git a/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java b/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java new file mode 100644 index 000000000000..7728d2dad6ef --- /dev/null +++ b/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java @@ -0,0 +1,74 @@ +package com.baeldung.jsonpath.introduction; + +import com.jayway.jsonpath.Criteria; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.Filter; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Predicate; +import org.junit.Test; + +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.Scanner; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +public class OperationIntegrationTest { + private InputStream jsonInputStream = this.getClass() + .getClassLoader() + .getResourceAsStream("intro_api.json"); + private String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z") + .next(); + + @Test + public void givenJsonPathWithoutPredicates_whenReading_thenCorrect() { + String jsonpathCreatorNamePath = "$['tool']['jsonpath']['creator']['name']"; + String jsonpathCreatorLocationPath = "$['tool']['jsonpath']['creator']['location'][*]"; + + DocumentContext jsonContext = JsonPath.parse(jsonDataSourceString); + String jsonpathCreatorName = jsonContext.read(jsonpathCreatorNamePath); + List jsonpathCreatorLocation = jsonContext.read(jsonpathCreatorLocationPath); + + assertEquals("Jayway Inc.", jsonpathCreatorName); + assertThat(jsonpathCreatorLocation.toString(), containsString("Malmo")); + assertThat(jsonpathCreatorLocation.toString(), containsString("San Francisco")); + assertThat(jsonpathCreatorLocation.toString(), containsString("Helsingborg")); + } + + @Test + public void givenJsonPathWithFilterPredicate_whenReading_thenCorrect() { + Filter expensiveFilter = Filter.filter(Criteria.where("price") + .gt(20.00)); + List> expensive = JsonPath.parse(jsonDataSourceString) + .read("$['book'][?]", expensiveFilter); + predicateUsageAssertionHelper(expensive); + } + + @Test + public void givenJsonPathWithCustomizedPredicate_whenReading_thenCorrect() { + Predicate expensivePredicate = context -> Float.valueOf(context.item(Map.class) + .get("price") + .toString()) > 20.00; + List> expensive = JsonPath.parse(jsonDataSourceString) + .read("$['book'][?]", expensivePredicate); + predicateUsageAssertionHelper(expensive); + } + + @Test + public void givenJsonPathWithInlinePredicate_whenReading_thenCorrect() { + List> expensive = JsonPath.parse(jsonDataSourceString) + .read("$['book'][?(@['price'] > $['price range']['medium'])]"); + predicateUsageAssertionHelper(expensive); + } + + private void predicateUsageAssertionHelper(List predicate) { + assertThat(predicate.toString(), containsString("Beginning JSON")); + assertThat(predicate.toString(), containsString("JSON at Work")); + assertThat(predicate.toString(), not(containsString("Learn JSON in a DAY"))); + assertThat(predicate.toString(), not(containsString("JSON: Questions and Answers"))); + } +} diff --git a/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java b/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java new file mode 100644 index 000000000000..85e5d3e82627 --- /dev/null +++ b/json-modules/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java @@ -0,0 +1,101 @@ +package com.baeldung.jsonpath.introduction; + +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; +import org.junit.Test; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Scanner; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +public class ServiceIntegrationTest { + private InputStream jsonInputStream = this.getClass() + .getClassLoader() + .getResourceAsStream("intro_service.json"); + private String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z") + .next(); + + @Test + public void givenId_whenRequestingRecordData_thenSucceed() { + Object dataObject = JsonPath.parse(jsonString) + .read("$[?(@.id == 2)]"); + String dataString = dataObject.toString(); + + assertThat(dataString, containsString("2")); + assertThat(dataString, containsString("Quantum of Solace")); + assertThat(dataString, containsString("Twenty-second James Bond movie")); + } + + @Test + public void givenStarring_whenRequestingMovieTitle_thenSucceed() { + List> dataList = JsonPath.parse(jsonString) + .read("$[?('Eva Green' in @['starring'])]"); + String title = (String) dataList.get(0) + .get("title"); + + assertEquals("Casino Royale", title); + } + + @Test + public void givenCompleteStructure_whenCalculatingTotalRevenue_thenSucceed() { + DocumentContext context = JsonPath.parse(jsonString); + int length = context.read("$.length()"); + long revenue = 0; + for (int i = 0; i < length; i++) { + revenue += context.read("$[" + i + "]['box office']", Long.class); + } + + assertEquals(594275385L + 591692078L + 1110526981L + 879376275L, revenue); + } + + @Test + public void givenStructure_whenRequestingHighestRevenueMovieTitle_thenSucceed() { + DocumentContext context = JsonPath.parse(jsonString); + List revenueList = context.read("$[*]['box office']"); + Integer[] revenueArray = revenueList.toArray(new Integer[0]); + Arrays.sort(revenueArray); + + int highestRevenue = revenueArray[revenueArray.length - 1]; + Configuration pathConfiguration = Configuration.builder() + .options(Option.AS_PATH_LIST) + .build(); + List pathList = JsonPath.using(pathConfiguration) + .parse(jsonString) + .read("$[?(@['box office'] == " + highestRevenue + ")]"); + + Map dataRecord = context.read(pathList.get(0)); + String title = dataRecord.get("title"); + + assertEquals("Skyfall", title); + } + + @Test + public void givenDirector_whenRequestingLatestMovieTitle_thenSucceed() { + DocumentContext context = JsonPath.parse(jsonString); + List> dataList = context.read("$[?(@.director == 'Sam Mendes')]"); + + List dateList = new ArrayList<>(); + for (Map item : dataList) { + Object date = item.get("release date"); + dateList.add(date); + } + Long[] dateArray = dateList.toArray(new Long[0]); + Arrays.sort(dateArray); + + long latestTime = dateArray[dateArray.length - 1]; + List> finalDataList = context.read("$[?(@['director'] == 'Sam Mendes' && @['release date'] == " + latestTime + ")]"); + String title = (String) finalDataList.get(0) + .get("title"); + + assertEquals("Spectre", title); + } +} \ No newline at end of file diff --git a/json-modules/json-path/src/test/resources/logback.xml b/json-modules/json-path/src/test/resources/logback.xml new file mode 100644 index 000000000000..56af2d397e63 --- /dev/null +++ b/json-modules/json-path/src/test/resources/logback.xml @@ -0,0 +1,19 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/json-modules/pom.xml b/json-modules/pom.xml index b7d75d6eef92..d8cf8af1b1a5 100644 --- a/json-modules/pom.xml +++ b/json-modules/pom.xml @@ -17,6 +17,7 @@ json json-2 + json-path diff --git a/pom.xml b/pom.xml index 96e9f971d1f3..13ebc74f2f76 100644 --- a/pom.xml +++ b/pom.xml @@ -448,7 +448,6 @@ jooby jsf json-modules - json-path jsoup kubernetes ksqldb @@ -887,7 +886,6 @@ jooby jsf json-modules - json-path jsoup ksqldb From 9d08f6d4d6659546b6ce124223a619fc6df4b5cd Mon Sep 17 00:00:00 2001 From: panagiotiskakos Date: Thu, 23 Jun 2022 09:16:23 +0300 Subject: [PATCH 5/7] moved gson(submodule) to json-modules(parent) --- json-modules/gson/.gitignore | 13 + json-modules/gson/README.md | 16 ++ json-modules/gson/pom.xml | 74 +++++ .../com/baeldung/gson/entities/ActorGson.java | 57 ++++ .../com/baeldung/gson/entities/Animal.java | 5 + .../java/com/baeldung/gson/entities/Cow.java | 19 ++ .../java/com/baeldung/gson/entities/Dog.java | 18 ++ .../com/baeldung/gson/entities/Employee.java | 36 +++ .../com/baeldung/gson/entities/Movie.java | 48 ++++ .../gson/entities/MovieWithNullValue.java | 46 +++ .../com/baeldung/gson/entities/MyClass.java | 49 ++++ .../java/com/baeldung/gson/entities/User.java | 19 ++ .../com/baeldung/gson/entities/Weather.java | 40 +++ .../primitives/models/BooleanExample.java | 9 + .../gson/primitives/models/ByteExample.java | 9 + .../gson/primitives/models/CharExample.java | 9 + .../gson/primitives/models/DoubleExample.java | 9 + .../gson/primitives/models/FloatExample.java | 9 + .../models/InfinityValuesExample.java | 6 + .../gson/primitives/models/LongExample.java | 9 + .../primitives/models/PrimitiveBundle.java | 19 ++ .../models/PrimitiveBundleInitialized.java | 18 ++ .../serialization/ActorGsonDeserializer.java | 46 +++ .../serialization/ActorGsonSerializer.java | 33 +++ .../serialization/AnimalDeserializer.java | 35 +++ .../gson/serialization/MapDeserializer.java | 63 +++++ .../StringDateMapDeserializer.java | 44 +++ .../serializationwithexclusions/Exclude.java | 11 + .../serializationwithexclusions/MyClass.java | 13 + .../MyClassWithAnnotatedFields.java | 20 ++ .../MyClassWithCustomAnnotatedFields.java | 16 ++ .../MyClassWithTransientFields.java | 15 + .../MySubClass.java | 12 + .../MySubClassWithAnnotatedFields.java | 15 + .../MySubClassWithCustomAnnotatedFields.java | 14 + .../MySubClassWithTransientFields.java | 13 + .../gson/src/main/resources/logback.xml | 19 ++ .../gson/advance/GsonAdvanceUnitTest.java | 117 ++++++++ .../advance/RuntimeTypeAdapterFactory.java | 265 ++++++++++++++++++ .../JsonObjectConversionsUnitTest.java | 33 +++ .../baeldung/gson/deserialization/Foo.java | 61 ++++ .../gson/deserialization/FooDeserializer.java | 26 ++ ...serializerFromJsonWithDifferentFields.java | 21 ++ .../deserialization/FooInstanceCreator.java | 14 + .../gson/deserialization/FooWithInner.java | 24 ++ .../gson/deserialization/GenericFoo.java | 18 ++ .../GsonAlternateUnitTest.java | 39 +++ .../GsonDeserializeUnitTest.java | 40 +++ .../MapDeserializationUnitTest.java | 112 ++++++++ .../test/GsonDeserializationUnitTest.java | 138 +++++++++ .../gson/jsoncompare/JsonCompareUnitTest.java | 95 +++++++ .../primitives/PrimitiveValuesUnitTest.java | 248 ++++++++++++++++ .../DifferentNameSerializer.java | 24 ++ .../serialization/GsonSerializeUnitTest.java | 48 ++++ ...ngFieldsNotMatchingCriteriaSerializer.java | 27 ++ .../IgnoringFieldsSerializer.java | 19 ++ .../gson/serialization/SourceClass.java | 52 ++++ .../test/GsonSerializationUnitTest.java | 95 +++++++ .../serialization/test/JsonFileUnitTest.java | 43 +++ .../SerializationWithExclusionsUnitTest.java | 104 +++++++ .../gson/src/test/resources/.gitignore | 13 + .../gson/src/test/resources/logback-test.xml | 19 ++ json-modules/pom.xml | 1 + pom.xml | 2 - 64 files changed, 2602 insertions(+), 2 deletions(-) create mode 100644 json-modules/gson/.gitignore create mode 100644 json-modules/gson/README.md create mode 100644 json-modules/gson/pom.xml create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/ActorGson.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/Animal.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/Cow.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/Dog.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/Employee.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/Movie.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/MyClass.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/User.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/entities/Weather.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java create mode 100644 json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java create mode 100644 json-modules/gson/src/main/resources/logback.xml create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/Foo.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java create mode 100644 json-modules/gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java create mode 100644 json-modules/gson/src/test/resources/.gitignore create mode 100644 json-modules/gson/src/test/resources/logback-test.xml diff --git a/json-modules/gson/.gitignore b/json-modules/gson/.gitignore new file mode 100644 index 000000000000..83c05e60c802 --- /dev/null +++ b/json-modules/gson/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/json-modules/gson/README.md b/json-modules/gson/README.md new file mode 100644 index 000000000000..4255e2ead912 --- /dev/null +++ b/json-modules/gson/README.md @@ -0,0 +1,16 @@ +## GSON + +This module contains articles about Gson + +### Relevant Articles: + +- [Gson Deserialization Cookbook](https://www.baeldung.com/gson-deserialization-guide) +- [Jackson vs Gson](https://www.baeldung.com/jackson-vs-gson) +- [Exclude Fields from Serialization in Gson](https://www.baeldung.com/gson-exclude-fields-serialization) +- [Save Data to a JSON File with Gson](https://www.baeldung.com/gson-save-file) +- [Convert JSON to a Map Using Gson](https://www.baeldung.com/gson-json-to-map) +- [Working with Primitive Values in Gson](https://www.baeldung.com/java-gson-primitives) +- [Convert String to JsonObject with Gson](https://www.baeldung.com/gson-string-to-jsonobject) +- [Mapping Multiple JSON Fields to a Single Java Field](https://www.baeldung.com/json-multiple-fields-single-java-field) +- [Serializing and Deserializing a List with Gson](https://www.baeldung.com/gson-list) +- [Compare Two JSON Objects with Gson](https://www.baeldung.com/gson-compare-json-objects) diff --git a/json-modules/gson/pom.xml b/json-modules/gson/pom.xml new file mode 100644 index 000000000000..bd0b56278535 --- /dev/null +++ b/json-modules/gson/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + gson + 0.1-SNAPSHOT + gson + + + com.baeldung + json-modules + 1.0.0-SNAPSHOT + + + + + + org.projectlombok + lombok + ${lombok.version} + provided + + + joda-time + joda-time + ${joda-time.version} + + + commons-io + commons-io + ${commons-io.version} + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + com.google.guava + guava + ${guava.version} + + + + com.google.code.gson + gson + ${gson.version} + + + + + + gson + + + src/main/resources + true + + + + + + 2.8.0 + 2.9.6 + 11.0.2 + + + \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/ActorGson.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/ActorGson.java new file mode 100644 index 000000000000..a68dba243629 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/ActorGson.java @@ -0,0 +1,57 @@ +package com.baeldung.gson.entities; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +public class ActorGson { + + private String imdbId; + private Date dateOfBirth; + private List filmography; + + public ActorGson(String imdbId, Date dateOfBirth, List filmography) { + super(); + this.imdbId = imdbId; + this.dateOfBirth = dateOfBirth; + this.filmography = filmography; + } + + @Override + public String toString() { + return "ActorGson [imdbId=" + imdbId + ", dateOfBirth=" + formatDateOfBirth() + ", filmography=" + filmography + "]"; + } + + public String getImdbId() { + return imdbId; + } + + public void setImdbId(String imdbId) { + this.imdbId = imdbId; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public List getFilmography() { + return filmography; + } + + public void setFilmography(List filmography) { + this.filmography = filmography; + } + + private String formatDateOfBirth() { + final DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy"); + formatter.setTimeZone(TimeZone.getTimeZone("GMT")); + return formatter.format(dateOfBirth); + } + +} \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/Animal.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Animal.java new file mode 100644 index 000000000000..6c0f4a6e4e41 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Animal.java @@ -0,0 +1,5 @@ +package com.baeldung.gson.entities; + +public abstract class Animal { + public String type = "Animal"; +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/Cow.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Cow.java new file mode 100644 index 000000000000..5bd8d23f44b7 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Cow.java @@ -0,0 +1,19 @@ +package com.baeldung.gson.entities; + +public class Cow extends Animal { + private String breed; + + public Cow() { + breed = "Jersey"; + type = "Cow"; + } + + public String getBreed() { + return breed; + } + + public void setBreed(String breed) { + this.breed = breed; + } +} + diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/Dog.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Dog.java new file mode 100644 index 000000000000..ac555738669f --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Dog.java @@ -0,0 +1,18 @@ +package com.baeldung.gson.entities; + +public class Dog extends Animal { + private String petName; + + public Dog() { + petName = "Milo"; + type = "Dog"; + } + + public String getPetName() { + return petName; + } + + public void setPetName(String petName) { + this.petName = petName; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/Employee.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Employee.java new file mode 100644 index 000000000000..ecc4571dccbd --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Employee.java @@ -0,0 +1,36 @@ +package com.baeldung.gson.entities; + +public class Employee { + private int id; + private String name; + private String address; + + public Employee(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/Movie.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Movie.java new file mode 100644 index 000000000000..ebc4cff1372a --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Movie.java @@ -0,0 +1,48 @@ +package com.baeldung.gson.entities; + +import java.util.List; + +public class Movie { + + private String imdbId; + private String director; + private List actors; + + public Movie(String imdbID, String director, List actors) { + super(); + this.imdbId = imdbID; + this.director = director; + this.actors = actors; + } + + @Override + public String toString() { + return "Movie [imdbId=" + imdbId + ", director=" + director + ", actors=" + actors + "]"; + } + + public String getImdbID() { + return imdbId; + } + + public void setImdbID(String imdbID) { + this.imdbId = imdbID; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public List getActors() { + return actors; + } + + public void setActors(List actors) { + this.actors = actors; + } + + +} \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java new file mode 100644 index 000000000000..381d7cb83b5c --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java @@ -0,0 +1,46 @@ +package com.baeldung.gson.entities; + +import com.google.gson.annotations.Expose; + +import java.util.List; + +public class MovieWithNullValue { + + @Expose + private String imdbId; + private String director; + + @Expose + private List actors; + + public MovieWithNullValue(String imdbID, String director, List actors) { + super(); + this.imdbId = imdbID; + this.director = director; + this.actors = actors; + } + + public String getImdbID() { + return imdbId; + } + + public void setImdbID(String imdbID) { + this.imdbId = imdbID; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public List getActors() { + return actors; + } + + public void setActors(List actors) { + this.actors = actors; + } +} \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/MyClass.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/MyClass.java new file mode 100644 index 000000000000..66a1887414cd --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/MyClass.java @@ -0,0 +1,49 @@ +package com.baeldung.gson.entities; + +import java.util.Objects; + +public class MyClass { + private int id; + private String name; + + public MyClass(int id, String name) { + this.id = id; + this.name = name; + } + + public MyClass() { } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MyClass myClass = (MyClass) o; + return id == myClass.id && Objects.equals(name, myClass.name); + } + + @Override + public int hashCode() { + + return Objects.hash(id, name); + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/User.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/User.java new file mode 100644 index 000000000000..d821ef555234 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/User.java @@ -0,0 +1,19 @@ +package com.baeldung.gson.entities; + +public class User { + + private int id; + private String name; + private transient String nationality; + + public User(int id, String name, String nationality) { + this.id = id; + this.name = name; + this.nationality = nationality; + } + + public User(int id, String name) { + this(id, name, null); + } + +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/entities/Weather.java b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Weather.java new file mode 100644 index 000000000000..b68ec4c6d4e2 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/entities/Weather.java @@ -0,0 +1,40 @@ +package com.baeldung.gson.entities; + +import com.google.gson.annotations.SerializedName; + +public class Weather { + + @SerializedName(value = "location", alternate = "place") + private String location; + + @SerializedName(value = "temp", alternate = "temperature") + private int temp; + + @SerializedName(value = "outlook", alternate = "weather") + private String outlook; + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public int getTemp() { + return temp; + } + + public void setTemp(int temp) { + this.temp = temp; + } + + public String getOutlook() { + return outlook; + } + + public void setOutlook(String outlook) { + this.outlook = outlook; + } + +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java new file mode 100644 index 000000000000..1f05fc611935 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java @@ -0,0 +1,9 @@ +package com.baeldung.gson.primitives.models; + +public class BooleanExample { + public boolean value; + + public String toString() { + return "{boolean: " + value + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java new file mode 100644 index 000000000000..6ec4e42ea395 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java @@ -0,0 +1,9 @@ +package com.baeldung.gson.primitives.models; + +public class ByteExample { + public byte value = (byte) 1; + + public String toString() { + return "{byte: " + value + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java new file mode 100644 index 000000000000..69d1a95fcdc2 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java @@ -0,0 +1,9 @@ +package com.baeldung.gson.primitives.models; + +public class CharExample { + public char value; + + public String toString() { + return "{char: " + value + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java new file mode 100644 index 000000000000..7c9db2bd50c5 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java @@ -0,0 +1,9 @@ +package com.baeldung.gson.primitives.models; + +public class DoubleExample { + public double value; + + public String toString() { + return "{float: " + value + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java new file mode 100644 index 000000000000..86c0c4802c56 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java @@ -0,0 +1,9 @@ +package com.baeldung.gson.primitives.models; + +public class FloatExample { + public float value; + + public String toString() { + return "{float: " + value + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java new file mode 100644 index 000000000000..90f10c075169 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java @@ -0,0 +1,6 @@ +package com.baeldung.gson.primitives.models; + +public class InfinityValuesExample { + public float negativeInfinity; + public float positiveInfinity; +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java new file mode 100644 index 000000000000..021de1d06d55 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java @@ -0,0 +1,9 @@ +package com.baeldung.gson.primitives.models; + +public class LongExample { + public long value = 1; + + public String toString() { + return "{byte: " + value + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java new file mode 100644 index 000000000000..10134110f3c7 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java @@ -0,0 +1,19 @@ +package com.baeldung.gson.primitives.models; + +public class PrimitiveBundle { + public byte byteValue; + public short shortValue; + public int intValue; + public long longValue; + public float floatValue; + public double doubleValue; + public boolean booleanValue; + public char charValue; + + public String toString() { + return "{" + "byte: " + byteValue + ", " + "short: " + shortValue + ", " + + "int: " + intValue + ", " + "long: " + longValue + ", " + + "float: " + floatValue + ", " + "double: " + doubleValue + ", " + + "boolean: " + booleanValue + ", " + "char: " + charValue + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java new file mode 100644 index 000000000000..c6eb6ca26753 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java @@ -0,0 +1,18 @@ +package com.baeldung.gson.primitives.models; + +public class PrimitiveBundleInitialized { + // @formatter:off + public byte byteValue = (byte) 1; + public short shortValue = (short) 1; + public int intValue = 1; + public long longValue = 1L; + public float floatValue = 1.0f; + public double doubleValue = 1; + // @formatter:on + + public String toString() { + return "{" + "byte: " + byteValue + ", " + "short: " + shortValue + ", " + + "int: " + intValue + ", " + "long: " + longValue + ", " + + "float: " + floatValue + ", " + "double: " + doubleValue + "}"; + } +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java new file mode 100644 index 000000000000..34c9f83888fe --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java @@ -0,0 +1,46 @@ +package com.baeldung.gson.serialization; + +import java.lang.reflect.Type; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; + +import com.baeldung.gson.entities.ActorGson; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +public class ActorGsonDeserializer implements JsonDeserializer { + + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); + + @Override + public ActorGson deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + + final JsonObject jsonObject = json.getAsJsonObject(); + + final JsonElement jsonImdbId = jsonObject.get("imdbId"); + final JsonElement jsonDateOfBirth = jsonObject.get("dateOfBirth"); + final JsonArray jsonFilmography = jsonObject.getAsJsonArray("filmography"); + + final ArrayList filmList = new ArrayList(); + if (jsonFilmography != null) { + for (int i = 0; i < jsonFilmography.size(); i++) { + filmList.add(jsonFilmography.get(i).getAsString()); + } + } + + ActorGson actorGson = null; + try { + actorGson = new ActorGson(jsonImdbId.getAsString(), sdf.parse(jsonDateOfBirth.getAsString()), filmList); + } catch (final ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return actorGson; + } +} \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java new file mode 100644 index 000000000000..4ca653f76bf5 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java @@ -0,0 +1,33 @@ +package com.baeldung.gson.serialization; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.baeldung.gson.entities.ActorGson; + +import java.lang.reflect.Type; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.stream.Collectors; + +public class ActorGsonSerializer implements JsonSerializer { + + private SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); + + @Override + public JsonElement serialize(ActorGson actor, Type type, JsonSerializationContext jsonSerializationContext) { + + JsonObject actorJsonObj = new JsonObject(); + actorJsonObj.addProperty("IMDB Code", actor.getImdbId()); + actorJsonObj.addProperty("Date Of Birth", actor.getDateOfBirth() != null ? sdf.format(actor.getDateOfBirth()) : null); + actorJsonObj.addProperty("N° Film: ", actor.getFilmography() != null ? actor.getFilmography().size() : null); + actorJsonObj.addProperty("filmography", actor.getFilmography() != null ? convertFilmography(actor.getFilmography()) : null); + + return actorJsonObj; + } + + private String convertFilmography(List filmography) { + return filmography.stream().collect(Collectors.joining("-")); + } +} \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java new file mode 100644 index 000000000000..6c72ddb0da2e --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java @@ -0,0 +1,35 @@ +package com.baeldung.gson.serialization; + +import com.google.gson.Gson; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; +import com.baeldung.gson.entities.Animal; + +public class AnimalDeserializer implements JsonDeserializer { + private String animalTypeElementName; + private Gson gson; + private Map> animalTypeRegistry; + + public AnimalDeserializer(String animalTypeElementName) { + this.animalTypeElementName = animalTypeElementName; + this.gson = new Gson(); + this.animalTypeRegistry = new HashMap<>(); + } + + public void registerBarnType(String animalTypeName, Class animalType) { + animalTypeRegistry.put(animalTypeName, animalType); + } + + public Animal deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) { + JsonObject animalObject = json.getAsJsonObject(); + JsonElement animalTypeElement = animalObject.get(animalTypeElementName); + + Class animalType = animalTypeRegistry.get(animalTypeElement.getAsString()); + return gson.fromJson(animalObject, animalType); + } +} \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java new file mode 100644 index 000000000000..1954986547ef --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java @@ -0,0 +1,63 @@ +package com.baeldung.gson.serialization; + +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.util.Map; +import java.util.stream.Collectors; + +import com.baeldung.gson.entities.Employee; + +import com.google.gson.*; + +public class MapDeserializer implements JsonDeserializer> { + + @Override + public Map deserialize(JsonElement elem, Type type, JsonDeserializationContext context) throws JsonParseException { + + return elem.getAsJsonObject() + .entrySet() + .stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> e.getValue().isJsonPrimitive() ? + toPrimitive(e.getValue().getAsJsonPrimitive(), context) + : context.deserialize(e.getValue(), Employee.class) + )); + } + + private Object toPrimitive(JsonPrimitive jsonValue, JsonDeserializationContext context) { + if (jsonValue.isBoolean()) + return jsonValue.getAsBoolean(); + else if (jsonValue.isString()) + return jsonValue.getAsString(); + else { + BigDecimal bigDec = jsonValue.getAsBigDecimal(); + Long l; + Integer i; + if ((i = toInteger(bigDec)) != null) { + return i; + } else if ((l = toLong(bigDec)) != null) { + return l; + } else { + return bigDec.doubleValue(); + } + } + } + + private Long toLong(BigDecimal val) { + try { + return val.toBigIntegerExact().longValue(); + } catch (ArithmeticException e) { + return null; + } + } + + private Integer toInteger(BigDecimal val) { + try { + return val.intValueExact(); + } catch (ArithmeticException e) { + return null; + } + } + +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java new file mode 100644 index 000000000000..fa9d7d22400f --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java @@ -0,0 +1,44 @@ +package com.baeldung.gson.serialization; + +import java.lang.reflect.Type; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +public class StringDateMapDeserializer implements JsonDeserializer> { + + private static final Logger logger = LoggerFactory.getLogger(StringDateMapDeserializer.class); + + private SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + + @Override + public Map deserialize(JsonElement elem, Type type, JsonDeserializationContext jsonDeserializationContext) { + System.out.println("Deserializer called"); + logger.info("Deserializer called"); + return elem.getAsJsonObject() + .entrySet() + .stream() + .filter(e -> e.getValue().isJsonPrimitive()) + .filter(e -> e.getValue().getAsJsonPrimitive().isString()) + .collect(Collectors.toMap(Map.Entry::getKey, e -> formatDate(e.getValue()))); + } + + private Date formatDate(JsonElement value) { + try { + return format.parse(value.getAsString()); + } catch (ParseException ex) { + throw new JsonParseException(ex); + } + } + +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java new file mode 100644 index 000000000000..d3067e3482a6 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java @@ -0,0 +1,11 @@ +package com.baeldung.gson.serializationwithexclusions; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Exclude { +} \ No newline at end of file diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java new file mode 100644 index 000000000000..891979272189 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java @@ -0,0 +1,13 @@ +package com.baeldung.gson.serializationwithexclusions; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MyClass { + private long id; + private String name; + private String other; + private MySubClass subclass; +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java new file mode 100644 index 000000000000..4c38df1eac7a --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java @@ -0,0 +1,20 @@ +package com.baeldung.gson.serializationwithexclusions; + +import com.google.gson.annotations.Expose; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MyClassWithAnnotatedFields { + + @Expose + private long id; + @Expose + private String name; + private String other; + @Expose + private MySubClassWithAnnotatedFields subclass; + +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java new file mode 100644 index 000000000000..85871be03d7f --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java @@ -0,0 +1,16 @@ +package com.baeldung.gson.serializationwithexclusions; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MyClassWithCustomAnnotatedFields { + + private long id; + private String name; + @Exclude + private String other; + private MySubClassWithCustomAnnotatedFields subclass; + +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java new file mode 100644 index 000000000000..dfb9d4bd6ec9 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java @@ -0,0 +1,15 @@ +package com.baeldung.gson.serializationwithexclusions; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MyClassWithTransientFields { + + private long id; + private String name; + private transient String other; + private MySubClassWithTransientFields subclass; + +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java new file mode 100644 index 000000000000..6b8a28702085 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java @@ -0,0 +1,12 @@ +package com.baeldung.gson.serializationwithexclusions; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MySubClass { + private long id; + private String description; + private String otherVerboseInfo; +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java new file mode 100644 index 000000000000..0c94e8f2ccff --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java @@ -0,0 +1,15 @@ +package com.baeldung.gson.serializationwithexclusions; + +import com.google.gson.annotations.Expose; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MySubClassWithAnnotatedFields { + + @Expose private long id; + @Expose private String description; + private String otherVerboseInfo; +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java new file mode 100644 index 000000000000..0bd9a149cb4a --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java @@ -0,0 +1,14 @@ +package com.baeldung.gson.serializationwithexclusions; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MySubClassWithCustomAnnotatedFields { + + private long id; + private String description; + @Exclude + private String otherVerboseInfo; +} diff --git a/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java new file mode 100644 index 000000000000..817d2ee55738 --- /dev/null +++ b/json-modules/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java @@ -0,0 +1,13 @@ +package com.baeldung.gson.serializationwithexclusions; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MySubClassWithTransientFields { + + private long id; + private String description; + private transient String otherVerboseInfo; +} diff --git a/json-modules/gson/src/main/resources/logback.xml b/json-modules/gson/src/main/resources/logback.xml new file mode 100644 index 000000000000..7bd5154680da --- /dev/null +++ b/json-modules/gson/src/main/resources/logback.xml @@ -0,0 +1,19 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java new file mode 100644 index 000000000000..d4adb6e40670 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java @@ -0,0 +1,117 @@ +package com.baeldung.gson.advance; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import com.baeldung.gson.entities.Dog; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import com.baeldung.gson.entities.Animal; +import com.baeldung.gson.entities.Cow; +import com.baeldung.gson.entities.MyClass; +import com.baeldung.gson.serialization.AnimalDeserializer; +import org.junit.Test; + +public class GsonAdvanceUnitTest { + + @Test + public void givenListOfMyClass_whenSerializing_thenCorrect() { + List list = Arrays.asList(new MyClass(1, "name1"), new MyClass(2, "name2")); + + Gson gson = new Gson(); + String jsonString = gson.toJson(list); + String expectedString = "[{\"id\":1,\"name\":\"name1\"},{\"id\":2,\"name\":\"name2\"}]"; + + assertEquals(expectedString, jsonString); + } + + @Test(expected = ClassCastException.class) + public void givenJsonString_whenIncorrectDeserializing_thenThrowClassCastException() { + String inputString = "[{\"id\":1,\"name\":\"name1\"},{\"id\":2,\"name\":\"name2\"}]"; + + Gson gson = new Gson(); + List outputList = gson.fromJson(inputString, ArrayList.class); + + assertEquals(1, outputList.get(0).getId()); + } + + @Test + public void givenJsonString_whenDeserializing_thenReturnListOfMyClass() { + String inputString = "[{\"id\":1,\"name\":\"name1\"},{\"id\":2,\"name\":\"name2\"}]"; + List inputList = Arrays.asList(new MyClass(1, "name1"), new MyClass(2, "name2")); + + Type listOfMyClassObject = new TypeToken>() {}.getType(); + + Gson gson = new Gson(); + List outputList = gson.fromJson(inputString, listOfMyClassObject); + + assertEquals(inputList, outputList); + } + + @Test + public void givenPolymorphicList_whenSerializeWithTypeAdapter_thenCorrect() { + String expectedString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; + + List inList = new ArrayList<>(); + inList.add(new Dog()); + inList.add(new Cow()); + + String jsonString = new Gson().toJson(inList); + + assertEquals(expectedString, jsonString); + } + + @Test + public void givenPolymorphicList_whenDeserializeWithTypeAdapter_thenCorrect() { + String inputString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; + + AnimalDeserializer deserializer = new AnimalDeserializer("type"); + deserializer.registerBarnType("Dog", Dog.class); + deserializer.registerBarnType("Cow", Cow.class); + Gson gson = new GsonBuilder() + .registerTypeAdapter(Animal.class, deserializer) + .create(); + + List outList = gson.fromJson(inputString, new TypeToken>(){}.getType()); + + assertEquals(2, outList.size()); + assertTrue(outList.get(0) instanceof Dog); + assertTrue(outList.get(1) instanceof Cow); + } + + @Test + public void givenPolymorphicList_whenSerializeWithRuntimeTypeAdapter_thenCorrect() { + String expectedString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; + + List inList = new ArrayList<>(); + inList.add(new Dog()); + inList.add(new Cow()); + String jsonString = new Gson().toJson(inList); + + assertEquals(expectedString, jsonString); + } + + @Test + public void givenPolymorphicList_whenDeserializeWithRuntimeTypeAdapter_thenCorrect() { + String inputString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; + + Type listOfAnimals = new TypeToken>() {}.getType(); + + RuntimeTypeAdapterFactory adapter = RuntimeTypeAdapterFactory.of(Animal.class, "type") + .registerSubtype(Dog.class) + .registerSubtype(Cow.class); + + Gson gson = new GsonBuilder().registerTypeAdapterFactory(adapter).create(); + + List outList = gson.fromJson(inputString, listOfAnimals); + + assertEquals(2, outList.size()); + assertTrue(outList.get(0) instanceof Dog); + assertTrue(outList.get(1) instanceof Cow); + } +} \ No newline at end of file diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java b/json-modules/gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java new file mode 100644 index 000000000000..aab3f5f3f1fa --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java @@ -0,0 +1,265 @@ +package com.baeldung.gson.advance; + +/* + * Copyright (C) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.Streams; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Adapts values whose runtime type may differ from their declaration type. This + * is necessary when a field's type is not the same type that GSON should create + * when deserializing that field. For example, consider these types: + *
   {@code
+ *   abstract class Shape {
+ *     int x;
+ *     int y;
+ *   }
+ *   class Circle extends Shape {
+ *     int radius;
+ *   }
+ *   class Rectangle extends Shape {
+ *     int width;
+ *     int height;
+ *   }
+ *   class Diamond extends Shape {
+ *     int width;
+ *     int height;
+ *   }
+ *   class Drawing {
+ *     Shape bottomShape;
+ *     Shape topShape;
+ *   }
+ * }
+ *

Without additional type information, the serialized JSON is ambiguous. Is + * the bottom shape in this drawing a rectangle or a diamond?

   {@code
+ *   {
+ *     "bottomShape": {
+ *       "width": 10,
+ *       "height": 5,
+ *       "x": 0,
+ *       "y": 0
+ *     },
+ *     "topShape": {
+ *       "radius": 2,
+ *       "x": 4,
+ *       "y": 1
+ *     }
+ *   }}
+ * This class addresses this problem by adding type information to the + * serialized JSON and honoring that type information when the JSON is + * deserialized:
   {@code
+ *   {
+ *     "bottomShape": {
+ *       "type": "Diamond",
+ *       "width": 10,
+ *       "height": 5,
+ *       "x": 0,
+ *       "y": 0
+ *     },
+ *     "topShape": {
+ *       "type": "Circle",
+ *       "radius": 2,
+ *       "x": 4,
+ *       "y": 1
+ *     }
+ *   }}
+ * Both the type field name ({@code "type"}) and the type labels ({@code + * "Rectangle"}) are configurable. + * + *

Registering Types

+ * Create a {@code RuntimeTypeAdapterFactory} by passing the base type and type field + * name to the {@link #of} factory method. If you don't supply an explicit type + * field name, {@code "type"} will be used.
   {@code
+ *   RuntimeTypeAdapterFactory shapeAdapterFactory
+ *       = RuntimeTypeAdapterFactory.of(Shape.class, "type");
+ * }
+ * Next register all of your subtypes. Every subtype must be explicitly + * registered. This protects your application from injection attacks. If you + * don't supply an explicit type label, the type's simple name will be used. + *
   {@code
+ *   shapeAdapterFactory.registerSubtype(Rectangle.class, "Rectangle");
+ *   shapeAdapterFactory.registerSubtype(Circle.class, "Circle");
+ *   shapeAdapterFactory.registerSubtype(Diamond.class, "Diamond");
+ * }
+ * Finally, register the type adapter factory in your application's GSON builder: + *
   {@code
+ *   Gson gson = new GsonBuilder()
+ *       .registerTypeAdapterFactory(shapeAdapterFactory)
+ *       .create();
+ * }
+ * Like {@code GsonBuilder}, this API supports chaining:
   {@code
+ *   RuntimeTypeAdapterFactory shapeAdapterFactory = RuntimeTypeAdapterFactory.of(Shape.class)
+ *       .registerSubtype(Rectangle.class)
+ *       .registerSubtype(Circle.class)
+ *       .registerSubtype(Diamond.class);
+ * }
+ */ +public final class RuntimeTypeAdapterFactory implements TypeAdapterFactory { + private final Class baseType; + private final String typeFieldName; + private final Map> labelToSubtype = new LinkedHashMap>(); + private final Map, String> subtypeToLabel = new LinkedHashMap, String>(); + private final boolean maintainType; + + private RuntimeTypeAdapterFactory(Class baseType, String typeFieldName, boolean maintainType) { + if (typeFieldName == null || baseType == null) { + throw new NullPointerException(); + } + this.baseType = baseType; + this.typeFieldName = typeFieldName; + this.maintainType = maintainType; + } + + /** + * Creates a new runtime type adapter using for {@code baseType} using {@code + * typeFieldName} as the type field name. Type field names are case sensitive. + * {@code maintainType} flag decide if the type will be stored in pojo or not. + */ + public static RuntimeTypeAdapterFactory of(Class baseType, String typeFieldName, boolean maintainType) { + return new RuntimeTypeAdapterFactory(baseType, typeFieldName, maintainType); + } + + /** + * Creates a new runtime type adapter using for {@code baseType} using {@code + * typeFieldName} as the type field name. Type field names are case sensitive. + */ + public static RuntimeTypeAdapterFactory of(Class baseType, String typeFieldName) { + return new RuntimeTypeAdapterFactory(baseType, typeFieldName, false); + } + + /** + * Creates a new runtime type adapter for {@code baseType} using {@code "type"} as + * the type field name. + */ + public static RuntimeTypeAdapterFactory of(Class baseType) { + return new RuntimeTypeAdapterFactory(baseType, "type", false); + } + + /** + * Registers {@code type} identified by {@code label}. Labels are case + * sensitive. + * + * @throws IllegalArgumentException if either {@code type} or {@code label} + * have already been registered on this type adapter. + */ + public RuntimeTypeAdapterFactory registerSubtype(Class type, String label) { + if (type == null || label == null) { + throw new NullPointerException(); + } + if (subtypeToLabel.containsKey(type) || labelToSubtype.containsKey(label)) { + throw new IllegalArgumentException("types and labels must be unique"); + } + labelToSubtype.put(label, type); + subtypeToLabel.put(type, label); + return this; + } + + /** + * Registers {@code type} identified by its {@link Class#getSimpleName simple + * name}. Labels are case sensitive. + * + * @throws IllegalArgumentException if either {@code type} or its simple name + * have already been registered on this type adapter. + */ + public RuntimeTypeAdapterFactory registerSubtype(Class type) { + return registerSubtype(type, type.getSimpleName()); + } + + public TypeAdapter create(Gson gson, TypeToken type) { + if (type.getRawType() != baseType) { + return null; + } + + final Map> labelToDelegate + = new LinkedHashMap>(); + final Map, TypeAdapter> subtypeToDelegate + = new LinkedHashMap, TypeAdapter>(); + for (Map.Entry> entry : labelToSubtype.entrySet()) { + TypeAdapter delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); + labelToDelegate.put(entry.getKey(), delegate); + subtypeToDelegate.put(entry.getValue(), delegate); + } + + return new TypeAdapter() { + @Override public R read(JsonReader in) throws IOException { + JsonElement jsonElement = Streams.parse(in); + JsonElement labelJsonElement; + if (maintainType) { + labelJsonElement = jsonElement.getAsJsonObject().get(typeFieldName); + } else { + labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName); + } + + if (labelJsonElement == null) { + throw new JsonParseException("cannot deserialize " + baseType + + " because it does not define a field named " + typeFieldName); + } + String label = labelJsonElement.getAsString(); + @SuppressWarnings("unchecked") // registration requires that subtype extends T + TypeAdapter delegate = (TypeAdapter) labelToDelegate.get(label); + if (delegate == null) { + throw new JsonParseException("cannot deserialize " + baseType + " subtype named " + + label + "; did you forget to register a subtype?"); + } + return delegate.fromJsonTree(jsonElement); + } + + @Override public void write(JsonWriter out, R value) throws IOException { + Class srcType = value.getClass(); + String label = subtypeToLabel.get(srcType); + @SuppressWarnings("unchecked") // registration requires that subtype extends T + TypeAdapter delegate = (TypeAdapter) subtypeToDelegate.get(srcType); + if (delegate == null) { + throw new JsonParseException("cannot serialize " + srcType.getName() + + "; did you forget to register a subtype?"); + } + JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); + + if (maintainType) { + Streams.write(jsonObject, out); + return; + } + + JsonObject clone = new JsonObject(); + + if (jsonObject.has(typeFieldName)) { + throw new JsonParseException("cannot serialize " + srcType.getName() + + " because it already defines a field named " + typeFieldName); + } + clone.add(typeFieldName, new JsonPrimitive(label)); + + for (Map.Entry e : jsonObject.entrySet()) { + clone.add(e.getKey(), e.getValue()); + } + Streams.write(clone, out); + } + }.nullSafe(); + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java new file mode 100644 index 000000000000..9f07617969e1 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.gson.conversion; + +import com.google.gson.*; +import org.junit.Assert; +import org.junit.jupiter.api.Test; + +public class JsonObjectConversionsUnitTest { + + @Test + void whenUsingJsonParser_thenConvertToJsonObject() throws Exception { + // Example 1: Using JsonParser + String json = "{ \"name\": \"Baeldung\", \"java\": true }"; + + JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject(); + + Assert.assertTrue(jsonObject.isJsonObject()); + Assert.assertTrue(jsonObject.get("name").getAsString().equals("Baeldung")); + Assert.assertTrue(jsonObject.get("java").getAsBoolean() == true); + } + + @Test + void whenUsingGsonInstanceFromJson_thenConvertToJsonObject() throws Exception { + // Example 2: Using fromJson + String json = "{ \"name\": \"Baeldung\", \"java\": true }"; + + JsonObject convertedObject = new Gson().fromJson(json, JsonObject.class); + + Assert.assertTrue(convertedObject.isJsonObject()); + Assert.assertTrue(convertedObject.get("name").getAsString().equals("Baeldung")); + Assert.assertTrue(convertedObject.get("java").getAsBoolean() == true); + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/Foo.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/Foo.java new file mode 100644 index 000000000000..e5567860207d --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/Foo.java @@ -0,0 +1,61 @@ +package com.baeldung.gson.deserialization; + +public class Foo { + public int intValue; + public String stringValue; + + public Foo(final int intValue, final String stringValue) { + this.intValue = intValue; + this.stringValue = stringValue; + } + + public Foo(final String stringValue) { + this.stringValue = stringValue; + } + + public Foo() { + super(); + } + + // API + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = (prime * result) + intValue; + result = (prime * result) + ((stringValue == null) ? 0 : stringValue.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Foo other = (Foo) obj; + if (intValue != other.intValue) { + return false; + } + if (stringValue == null) { + if (other.stringValue != null) { + return false; + } + } else if (!stringValue.equals(other.stringValue)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "TargetClass{" + "intValue= " + intValue + ", stringValue= " + stringValue + '}'; + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java new file mode 100644 index 000000000000..1ccb3f7de990 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java @@ -0,0 +1,26 @@ +package com.baeldung.gson.deserialization; + +import java.lang.reflect.Type; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +public class FooDeserializer implements JsonDeserializer { + + @Override + public Foo[] deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { + final JsonArray jArray = json.getAsJsonArray(); + final Foo[] scArray = new Foo[jArray.size()]; + int index = 0; + for (final JsonElement jElement : jArray) { + final int i = jElement.getAsJsonObject().get("intValue").getAsInt(); + final String s = jElement.getAsJsonObject().get("stringValue").getAsString(); + scArray[index++] = new Foo(i, s); + } + return scArray; + } + +} \ No newline at end of file diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java new file mode 100644 index 000000000000..289f71820cd3 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java @@ -0,0 +1,21 @@ +package com.baeldung.gson.deserialization; + +import java.lang.reflect.Type; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +public class FooDeserializerFromJsonWithDifferentFields implements JsonDeserializer { + + @Override + public Foo deserialize(final JsonElement jElement, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { + final JsonObject jObject = jElement.getAsJsonObject(); + final int intValue = jObject.get("valueInt").getAsInt(); + final String stringValue = jObject.get("valueString").getAsString(); + return new Foo(intValue, stringValue); + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java new file mode 100644 index 000000000000..e3ebc0987441 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java @@ -0,0 +1,14 @@ +package com.baeldung.gson.deserialization; + +import java.lang.reflect.Type; + +import com.google.gson.InstanceCreator; + +public class FooInstanceCreator implements InstanceCreator { + + @Override + public Foo createInstance(Type type) { + return new Foo("sample"); + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java new file mode 100644 index 000000000000..ddad97b4ab90 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java @@ -0,0 +1,24 @@ +package com.baeldung.gson.deserialization; + +public class FooWithInner { + public int intValue; + public String stringValue; + public InnerFoo innerFoo; + + public FooWithInner(int intValue, String stringValue, String name) { + super(); + this.intValue = intValue; + this.stringValue = stringValue; + this.innerFoo = new InnerFoo(name); + } + + public class InnerFoo { + public String name; + + public InnerFoo(String name) { + super(); + this.name = name; + } + + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java new file mode 100644 index 000000000000..9a81d5ae7a9b --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java @@ -0,0 +1,18 @@ +package com.baeldung.gson.deserialization; + +public class GenericFoo { + + public T theValue; + + public GenericFoo(final T value) { + theValue = value; + } + + // + + @Override + public final String toString() { + return "GenericTargetClass{" + "intField=" + theValue + '}'; + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java new file mode 100644 index 000000000000..c49a1ea568fd --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java @@ -0,0 +1,39 @@ +package com.baeldung.gson.deserialization; + +import static org.junit.Assert.assertEquals; + +import com.baeldung.gson.entities.Weather; +import org.junit.Test; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public class GsonAlternateUnitTest { + + @Test + public void givenTwoJsonFormats_whenDeserialized_thenWeatherObjectsCreated() throws Exception { + + Gson gson = new GsonBuilder().create(); + + Weather weather = gson.fromJson("{" + + "\"location\": \"London\"," + + "\"temp\": 15," + + "\"weather\": \"Cloudy\"" + + "}", Weather.class); + + assertEquals("London", weather.getLocation()); + assertEquals("Cloudy", weather.getOutlook()); + assertEquals(15, weather.getTemp()); + + weather = gson.fromJson("{" + + "\"place\": \"Lisbon\"," + + "\"temperature\": 35," + + "\"outlook\": \"Sunny\"" + + "}", Weather.class); + + assertEquals("Lisbon", weather.getLocation()); + assertEquals("Sunny", weather.getOutlook()); + assertEquals(35, weather.getTemp()); + + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java new file mode 100644 index 000000000000..73e76967b9c9 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.gson.deserialization; + +import java.text.ParseException; + +import com.baeldung.gson.entities.Movie; +import com.baeldung.gson.serialization.ActorGsonDeserializer; +import com.baeldung.gson.entities.ActorGson; +import org.junit.Assert; +import org.junit.Test; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public class GsonDeserializeUnitTest { + @Test + public void whenSimpleDeserialize_thenCorrect() throws ParseException { + + final String jsonInput = "{\"imdbId\":\"tt0472043\",\"actors\":" + "[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"Tue Sep 21 11:00:00 GMT 1982\",\"filmography\":" + "[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; + + final Gson gson = new GsonBuilder().setDateFormat("EEE MMM dd hh:mm:ss zzz yyyy").create(); + + final Movie outputMovie = gson.fromJson(jsonInput, Movie.class); + + final String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorGson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; + Assert.assertEquals(outputMovie.toString(), expectedOutput); + } + + @Test + public void whenCustomDeserialize_thenCorrect() throws ParseException { + + final String jsonInput = "{\"imdbId\":\"tt0472043\",\"actors\":" + "[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":" + "[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; + + final Gson gson = new GsonBuilder().registerTypeAdapter(ActorGson.class, new ActorGsonDeserializer()).create(); + + final Movie outputMovie = gson.fromJson(jsonInput, Movie.class); + + final String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorGson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; + Assert.assertEquals(outputMovie.toString(), expectedOutput); + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java new file mode 100644 index 000000000000..77c934283a21 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java @@ -0,0 +1,112 @@ +package com.baeldung.gson.deserialization; + +import java.lang.reflect.Type; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +import org.apache.commons.lang3.time.DateUtils; +import com.baeldung.gson.entities.Employee; +import com.baeldung.gson.serialization.MapDeserializer; +import com.baeldung.gson.serialization.StringDateMapDeserializer; +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonSyntaxException; +import com.google.gson.internal.LinkedTreeMap; +import com.google.gson.reflect.TypeToken; + +public class MapDeserializationUnitTest { + + private static final Logger logger = LoggerFactory.getLogger(MapDeserializationUnitTest.class); + + @Test + public void whenUsingMapClass_thenShouldReturnMapWithDefaultClasses() { + + String jsonString = "{'employee.name':'Bob','employee.salary':10000, 'employee.active':true, " + + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}"; + + Gson gson = new Gson(); + Map map = gson.fromJson(jsonString, Map.class); + + logger.info("The converted map: {}", map); + Assert.assertEquals(4, map.size()); + Assert.assertEquals(Double.class, map.get("employee.salary").getClass()); + Assert.assertEquals(LinkedTreeMap.class, map.get("employee").getClass()); + + } + + @Test(expected = JsonSyntaxException.class) + public void whenUsingJsonStringWithDuplicateKey_thenShouldThrowJsonSyntaxException() { + + String jsonString = "{'employee.name':'Bob', 'employee.name':'Jenny','employee.salary':10000, " + + "'employee.active':true, " + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}"; + + Gson gson = new Gson(); + Map map = gson.fromJson(jsonString, Map.class); + + logger.info("The converted map: {}", map); + } + + @Test + public void whenUsingTypeToken_thenShouldReturnMapWithProperClass() { + + String jsonString = "{'Bob':{'id':10, 'name': 'Bob Willis', 'address':'UK'}," + + "'Jenny':{'id':10, 'name': 'Jenny McCarthy', 'address':'USA'}, " + + "'Steve':{'id':10, 'name': 'Steven Waugh', 'address':'Australia'}}"; + + Gson gson = new Gson(); + Type empMapType = new TypeToken>(){}.getType(); + Map nameEmployeeMap = gson.fromJson(jsonString, empMapType); + + logger.info("The converted map: {}", nameEmployeeMap); + Assert.assertEquals(3, nameEmployeeMap.size()); + Assert.assertEquals(Employee.class, nameEmployeeMap.get("Bob").getClass()); + } + + @Test + public void whenUsingCustomDeserializer_thenShouldReturnMapWithProperClass() { + + String jsonString = "{'employee.name':'Bob','employee.salary':10000, 'employee.active':true, " + + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}"; + + Type type = new TypeToken>(){}.getType(); + Gson gson = new GsonBuilder() + .registerTypeAdapter(type, new MapDeserializer()) + .create(); + Map blendedMap = gson.fromJson(jsonString, type); + + logger.info("The converted map: {}", blendedMap); + Assert.assertEquals(4, blendedMap.size()); + Assert.assertEquals(Integer.class, blendedMap.get("employee.salary").getClass()); + Assert.assertEquals(Employee.class, blendedMap.get("employee").getClass()); + + } + + @Test + public void whenUsingCustomDateDeserializer_thenShouldReturnMapWithDate() { + String jsonString = "{'Bob': '2017/06/01', 'Jennie':'2015/01/03'}"; + Type type = new TypeToken>(){}.getType(); + Gson gson = new GsonBuilder() + .registerTypeAdapter(type, new StringDateMapDeserializer()) + .create(); + Map empJoiningDateMap = gson.fromJson(jsonString, type); + + logger.info("The converted map: {}", empJoiningDateMap); + logger.info("The map class {}", empJoiningDateMap.getClass()); + Assert.assertEquals(2, empJoiningDateMap.size()); + Assert.assertEquals(Date.class, empJoiningDateMap.get("Bob").getClass()); + Date dt = null; + try { + dt = DateUtils.parseDate("2017-06-01", "yyyy-MM-dd"); + Assert.assertEquals(dt, empJoiningDateMap.get("Bob")); + } catch (ParseException e) { + logger.error("Could not parse date", e); + } + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java new file mode 100644 index 000000000000..adc046ed8e73 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java @@ -0,0 +1,138 @@ +package com.baeldung.gson.deserialization.test; + +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Collection; + +import com.baeldung.gson.deserialization.Foo; +import com.baeldung.gson.deserialization.FooDeserializerFromJsonWithDifferentFields; +import com.baeldung.gson.deserialization.FooInstanceCreator; +import com.baeldung.gson.deserialization.FooWithInner; +import com.baeldung.gson.deserialization.GenericFoo; +import org.junit.Test; + +import com.google.common.collect.Lists; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; + +public class GsonDeserializationUnitTest { + + // tests - single element + + @Test + public final void whenDeserializingToSimpleObject_thenCorrect() { + final String json = "{\"intValue\":1,\"stringValue\":\"one\"}"; + + final Foo targetObject = new Gson().fromJson(json, Foo.class); + + assertEquals(targetObject.intValue, 1); + assertEquals(targetObject.stringValue, "one"); + } + + @Test + public final void givenJsonHasExtraValues_whenDeserializing_thenCorrect() { + final String json = "{\"intValue\":1,\"stringValue\":\"one\",\"extraString\":\"two\",\"extraFloat\":2.2}"; + final Foo targetObject = new Gson().fromJson(json, Foo.class); + + assertEquals(targetObject.intValue, 1); + assertEquals(targetObject.stringValue, "one"); + } + + @Test + public final void givenJsonHasNonMatchingFields_whenDeserializingWithCustomDeserializer_thenCorrect() { + final String json = "{\"valueInt\":7,\"valueString\":\"seven\"}"; + + final GsonBuilder gsonBldr = new GsonBuilder(); + gsonBldr.registerTypeAdapter(Foo.class, new FooDeserializerFromJsonWithDifferentFields()); + final Foo targetObject = gsonBldr.create().fromJson(json, Foo.class); + + assertEquals(targetObject.intValue, 7); + assertEquals(targetObject.stringValue, "seven"); + } + + @Test + public final void whenDeserializingToGenericObject_thenCorrect() { + final Type typeToken = new TypeToken>() { + }.getType(); + final String json = "{\"theValue\":1}"; + + final GenericFoo targetObject = new Gson().fromJson(json, typeToken); + + assertEquals(targetObject.theValue, new Integer(1)); + } + + // tests - multiple elements + + @Test + public final void givenJsonArrayOfFoos_whenDeserializingToArray_thenCorrect() { + final String json = "[{\"intValue\":1,\"stringValue\":\"one\"}," + "{\"intValue\":2,\"stringValue\":\"two\"}]"; + final Foo[] targetArray = new GsonBuilder().create().fromJson(json, Foo[].class); + + assertThat(Lists.newArrayList(targetArray), hasItem(new Foo(1, "one"))); + assertThat(Lists.newArrayList(targetArray), hasItem(new Foo(2, "two"))); + assertThat(Lists.newArrayList(targetArray), not(hasItem(new Foo(1, "two")))); + } + + @Test + public final void givenJsonArrayOfFoos_whenDeserializingCollection_thenCorrect() { + final String json = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]"; + final Type targetClassType = new TypeToken>() { + }.getType(); + + final Collection targetCollection = new Gson().fromJson(json, targetClassType); + assertThat(targetCollection, instanceOf(ArrayList.class)); + } + + // + + @Test + public void whenDeserializingJsonIntoElements_thenCorrect() { + final String jsonSourceObject = "{\"valueInt\":7,\"valueString\":\"seven\"}"; + final JsonParser jParser = new JsonParser(); + final JsonElement jElement = jParser.parse(jsonSourceObject); + final JsonObject jObject = jElement.getAsJsonObject(); + final int intValue = jObject.get("valueInt").getAsInt(); + final String stringValue = jObject.get("valueString").getAsString(); + + final Foo targetObject = new Foo(intValue, stringValue); + + assertEquals(targetObject.intValue, 7); + assertEquals(targetObject.stringValue, "seven"); + } + + // new examples + + @Test + public void whenDeserializingToNestedObjects_thenCorrect() { + final String json = "{\"intValue\":1,\"stringValue\":\"one\",\"innerFoo\":{\"name\":\"inner\"}}"; + + final FooWithInner targetObject = new Gson().fromJson(json, FooWithInner.class); + + assertEquals(targetObject.intValue, 1); + assertEquals(targetObject.stringValue, "one"); + assertEquals(targetObject.innerFoo.name, "inner"); + } + + @Test + public void whenDeserializingUsingInstanceCreator_thenCorrect() { + final String json = "{\"intValue\":1}"; + + final GsonBuilder gsonBldr = new GsonBuilder(); + gsonBldr.registerTypeAdapter(Foo.class, new FooInstanceCreator()); + final Foo targetObject = gsonBldr.create().fromJson(json, Foo.class); + + assertEquals(targetObject.intValue, 1); + assertEquals(targetObject.stringValue, "sample"); + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java new file mode 100644 index 000000000000..84989a7411f3 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java @@ -0,0 +1,95 @@ +package com.baeldung.gson.jsoncompare; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import org.junit.Test; +import static org.junit.Assert.*; + +public class JsonCompareUnitTest { + @Test + public void givenJsonStrings_whenCompared_thenNotEqual() { + String string1 = "{\"fullName\": \"Emily Jenkins\", \"age\": 27 }"; + String string2 = "{\"fullName\": \"Emily Jenkins\", \"age\": 27}"; + + assertNotEquals(string1, string2); + } + + @Test + public void givenIdenticalSimpleObjects_whenCompared_thenEqual() { + JsonParser parser = new JsonParser(); + String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27 }}"; + String string2 = "{\"customer\": {\"id\": \"44521\", \"fullName\": \"Emily Jenkins\",\"age\": 27}}"; + + assertTrue(parser.parse(string1) + .isJsonObject()); + assertEquals(parser.parse(string1), parser.parse(string2)); + } + + @Test + public void givenSameObjectsInDifferentOrder_whenCompared_thenEqual() { + JsonParser parser = new JsonParser(); + String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27 }}"; + String string2 = "{\"customer\": {\"id\": \"44521\",\"age\": 27, \"fullName\": \"Emily Jenkins\" }}"; + + JsonElement json1 = parser.parse(string1); + JsonElement json2 = parser.parse(string2); + + assertEquals(json1, json2); + } + + @Test + public void givenIdenticalArrays_whenCompared_thenEqual() { + JsonParser parser = new JsonParser(); + String string1 = "[10, 20, 30]"; + String string2 = "[10, 20, 30]"; + + assertTrue(parser.parse(string1) + .isJsonArray()); + assertEquals(parser.parse(string1), parser.parse(string2)); + } + + @Test + public void givenArraysInDifferentOrder_whenCompared_thenNotEqual() { + JsonParser parser = new JsonParser(); + String string1 = "[20, 10, 30]"; + String string2 = "[10, 20, 30]"; + + assertNotEquals(parser.parse(string1), parser.parse(string2)); + } + + @Test + public void givenIdenticalNestedObjects_whenCompared_thenEqual() { + JsonParser parser = new JsonParser(); + String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"fav_product\": \"Coke\", \"last_buy\": \"2012-04-23\"}}}"; + String string2 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"fav_product\": \"Coke\"}}}"; + + JsonElement json1 = parser.parse(string1); + JsonElement json2 = parser.parse(string2); + + assertEquals(json1, json2); + } + + @Test + public void givenIdenticalNestedObjectsWithArray_whenCompared_thenEqual() { + JsonParser parser = new JsonParser(); + String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"banana\", \"eggs\"]}}}"; + String string2 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"banana\", \"eggs\"]}}}"; + + JsonElement json1 = parser.parse(string1); + JsonElement json2 = parser.parse(string2); + + assertEquals(json1, json2); + } + + @Test + public void givenNestedObjectsDifferentArrayOrder_whenCompared_thenNotEqual() { + JsonParser parser = new JsonParser(); + String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"banana\", \"eggs\"]}}}"; + String string2 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"eggs\", \"banana\"]}}}"; + + JsonElement json1 = parser.parse(string1); + JsonElement json2 = parser.parse(string2); + + assertNotEquals(json1, json2); + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java new file mode 100644 index 000000000000..e1241fa92a37 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java @@ -0,0 +1,248 @@ +package com.baeldung.gson.primitives; + +import com.baeldung.gson.primitives.models.*; +import com.google.gson.*; +import org.junit.Test; + +import java.lang.reflect.Type; + +import static junit.framework.TestCase.*; + +public class PrimitiveValuesUnitTest { + @Test public void whenSerializingToJSON_thenShouldCreateJSON() { + PrimitiveBundle primitiveBundle = new PrimitiveBundle(); + + // @formatter:off + primitiveBundle.byteValue = (byte) 0x00001111; + primitiveBundle.shortValue = (short) 3; + primitiveBundle.intValue = 3; + primitiveBundle.longValue = 3; + primitiveBundle.floatValue = 3.5f; + primitiveBundle.doubleValue = 3.5; + primitiveBundle.booleanValue = true; + primitiveBundle.charValue = 'a'; + // @formatter:on + + Gson gson = new Gson(); + + String expected = "{\"byteValue\":17,\"shortValue\":3,\"intValue\":3," + + "\"longValue\":3,\"floatValue\":3.5" + ",\"doubleValue\":3.5" + + ",\"booleanValue\":true,\"charValue\":\"a\"}"; + + assertEquals(expected, gson.toJson(primitiveBundle)); + } + + @Test(expected = IllegalArgumentException.class) public void + whenSerializingInfinity_thenShouldRaiseAnException() { + InfinityValuesExample model = new InfinityValuesExample(); + model.negativeInfinity = Float.NEGATIVE_INFINITY; + model.positiveInfinity = Float.POSITIVE_INFINITY; + + Gson gson = new Gson(); + + gson.toJson(model); + } + + @Test(expected = IllegalArgumentException.class) public void + whenSerializingNaN_thenShouldRaiseAnException() { + FloatExample model = new FloatExample(); + model.value = Float.NaN; + + Gson gson = new Gson(); + gson.toJson(model); + } + + @Test public void whenDeserializingFromJSON_thenShouldParseTheValueInTheString() { + String json = "{\"byteValue\": 17, \"shortValue\": 3, \"intValue\": 3, " + + "\"longValue\": 3, \"floatValue\": 3.5" + ", \"doubleValue\": 3.5" + + ", \"booleanValue\": true, \"charValue\": \"a\"}"; + + Gson gson = new Gson(); + PrimitiveBundle model = gson.fromJson(json, PrimitiveBundle.class); + + // @formatter:off + assertEquals(17, model.byteValue); + assertEquals(3, model.shortValue); + assertEquals(3, model.intValue); + assertEquals(3, model.longValue); + assertEquals(3.5, model.floatValue, 0.0001); + assertEquals(3.5, model.doubleValue, 0.0001); + assertTrue( model.booleanValue); + assertEquals('a', model.charValue); + // @formatter:on + } + + @Test public void whenDeserializingHighPrecissionNumberIntoFloat_thenShouldPerformRounding() { + String json = "{\"value\": 12.123425589123456}"; + Gson gson = new Gson(); + FloatExample model = gson.fromJson(json, FloatExample.class); + assertEquals(12.123426f, model.value, 0.000001); + } + + @Test public void whenDeserializingHighPrecissiongNumberIntoDouble_thenShouldPerformRounding() { + String json = "{\"value\": 12.123425589123556}"; + Gson gson = new Gson(); + DoubleExample model = gson.fromJson(json, DoubleExample.class); + assertEquals(12.123425589124f, model.value, 0.000001); + } + + + @Test public void whenDeserializingValueThatOverflows_thenShouldOverflowSilently() { + Gson gson = new Gson(); + String json = "{\"value\": \"300\"}"; + ByteExample model = gson.fromJson(json, ByteExample.class); + + assertEquals(44, model.value); + } + + @Test public void whenDeserializingRealIntoByte_thenShouldRaiseAnException() { + Gson gson = new Gson(); + String json = "{\"value\": 2.3}"; + try { + gson.fromJson(json, ByteExample.class); + } catch (Exception ex) { + assertTrue(ex instanceof JsonSyntaxException); + assertTrue(ex.getCause() instanceof NumberFormatException); + return; + } + + fail(); + } + + @Test public void whenDeserializingRealIntoLong_thenShouldRaiseAnException() { + Gson gson = new Gson(); + String json = "{\"value\": 2.3}"; + try { + gson.fromJson(json, LongExample.class); + } catch (Exception ex) { + assertTrue(ex instanceof JsonSyntaxException); + assertTrue(ex.getCause() instanceof NumberFormatException); + return; + } + + fail(); + } + + @Test public void whenDeserializingRealWhoseDecimalPartIs0_thenShouldParseItCorrectly() { + Gson gson = new Gson(); + String json = "{\"value\": 2.0}"; + LongExample model = gson.fromJson(json, LongExample.class); + assertEquals(2, model.value); + } + + @Test public void whenDeserializingUnicodeChar_thenShouldParseItCorrectly() { + Gson gson = new Gson(); + String json = "{\"value\": \"\\u00AE\"}"; + CharExample model = gson.fromJson(json, CharExample.class); + + assertEquals('\u00AE', model.value); + } + + @Test public void whenDeserializingNullValues_thenShouldIgnoreThoseFields() { + Gson gson = new Gson(); + // @formatter:off + String json = "{\"byteValue\": null, \"shortValue\": null, " + + "\"intValue\": null, " + "\"longValue\": null, \"floatValue\": null" + + ", \"doubleValue\": null}"; + // @formatter:on + PrimitiveBundleInitialized model = gson.fromJson(json, + PrimitiveBundleInitialized.class); + + assertEquals(1, model.byteValue); + assertEquals(1, model.shortValue); + assertEquals(1, model.intValue); + assertEquals(1, model.longValue); + assertEquals(1, model.floatValue, 0.0001); + assertEquals(1, model.doubleValue, 0.0001); + } + + @Test(expected = JsonSyntaxException.class) public void + whenDeserializingTheEmptyString_thenShouldRaiseAnException() { + Gson gson = new Gson(); + // @formatter:off + String json = "{\"byteValue\": \"\", \"shortValue\": \"\", " + + "\"intValue\": \"\", " + "\"longValue\": \"\", \"floatValue\": \"\"" + + ", \"doubleValue\": \"\"" + ", \"booleanValue\": \"\"}"; + // @formatter:on + gson.fromJson(json, PrimitiveBundleInitialized.class); + } + + @Test public void whenDeserializingTheEmptyStringIntoChar_thenShouldHaveTheEmtpyChar() { + Gson gson = new Gson(); + // @formatter:off + String json = "{\"charValue\": \"\"}"; + // @formatter:on + CharExample model = gson.fromJson(json, CharExample.class); + + assertEquals(Character.MIN_VALUE, model.value); + } + + @Test public void whenDeserializingValidValueAppearingInAString_thenShouldParseTheValue() { + Gson gson = new Gson(); + // @formatter:off + String json = "{\"byteValue\": \"15\", \"shortValue\": \"15\", " + + "\"intValue\": \"15\", " + "\"longValue\": \"15\", \"floatValue\": \"15.0\"" + + ", \"doubleValue\": \"15.0\"}"; + // @formatter:on + PrimitiveBundleInitialized model = gson.fromJson(json, + PrimitiveBundleInitialized.class); + + assertEquals(15, model.byteValue); + assertEquals(15, model.shortValue); + assertEquals(15, model.intValue); + assertEquals(15, model.longValue); + assertEquals(15, model.floatValue, 0.0001); + assertEquals(15, model.doubleValue, 0.0001); + } + + @Test public void whenDeserializingABooleanFrom0Or1Integer_thenShouldRaiseAnException() { + String json = "{\"value\": 1}"; + Gson gson = new Gson(); + + try { + gson.fromJson(json, BooleanExample.class); + } catch (Exception ex) { + assertTrue(ex instanceof JsonSyntaxException); + assertTrue(ex.getCause() instanceof IllegalStateException); + return; + } + + fail(); + } + + @Test public void whenDeserializingWithCustomDeserializerABooleanFrom0Or1Integer_thenShouldWork() { + String json = "{\"value\": 1}"; + GsonBuilder builder = new GsonBuilder(); + builder.registerTypeAdapter(BooleanExample.class, + new BooleanAs2ValueIntegerDeserializer()); + + Gson gson = builder.create(); + + BooleanExample model = gson.fromJson(json, BooleanExample.class); + + assertTrue(model.value); + } + + // @formatter:off + static class BooleanAs2ValueIntegerDeserializer implements JsonDeserializer { + @Override public BooleanExample deserialize( + JsonElement jsonElement, + Type type, + JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + + BooleanExample model = new BooleanExample(); + int value = jsonElement.getAsJsonObject().getAsJsonPrimitive("value").getAsInt(); + if (value == 0) { + model.value = false; + } else if (value == 1) { + model.value = true; + } else { + throw new JsonParseException("Unexpected value. Trying to deserialize " + + "a boolean from an integer different than 0 and 1."); + } + + return model; + } + } + // @formatter:on +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java new file mode 100644 index 000000000000..b82f90f4769b --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java @@ -0,0 +1,24 @@ +package com.baeldung.gson.serialization; + +import java.lang.reflect.Type; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +public class DifferentNameSerializer implements JsonSerializer { + + @Override + public JsonElement serialize(final SourceClass src, final Type typeOfSrc, final JsonSerializationContext context) { + final String otherIntValueName = "otherIntValue"; + final String otherStringValueName = "otherStringValue"; + + final JsonObject jObject = new JsonObject(); + jObject.addProperty(otherIntValueName, src.getIntValue()); + jObject.addProperty(otherStringValueName, src.getStringValue()); + + return jObject; + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java new file mode 100644 index 000000000000..d5051060c404 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java @@ -0,0 +1,48 @@ +package com.baeldung.gson.serialization; + +import com.baeldung.gson.entities.Movie; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParser; +import com.baeldung.gson.entities.ActorGson; +import com.baeldung.gson.entities.MovieWithNullValue; +import org.junit.Assert; +import org.junit.Test; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; + +public class GsonSerializeUnitTest { + + @Test + public void whenSimpleSerialize_thenCorrect() throws ParseException { + + SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); + + ActorGson rudyYoungblood = new ActorGson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); + Movie movie = new Movie("tt0472043", "Mel Gibson", Arrays.asList(rudyYoungblood)); + + String expectedOutput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"Sep 21, 1982 12:00:00 AM\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; + Assert.assertEquals(new Gson().toJson(movie), expectedOutput); + } + + @Test + public void whenCustomSerialize_thenCorrect() throws ParseException { + Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().serializeNulls().disableHtmlEscaping().registerTypeAdapter(ActorGson.class, new ActorGsonSerializer()).create(); + + SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); + + ActorGson rudyYoungblood = new ActorGson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); + MovieWithNullValue movieWithNullValue = new MovieWithNullValue(null, "Mel Gibson", Arrays.asList(rudyYoungblood)); + + String expectedOutput = new GsonBuilder() + .setPrettyPrinting() + .serializeNulls() + .disableHtmlEscaping() + .create() + .toJson(new JsonParser() + .parse("{\"imdbId\":null,\"actors\":[{\"IMDB Code\":\"nm2199632\",\"Date Of Birth\":\"21-09-1982\",\"N° Film: \":3,\"filmography\":\"Apocalypto-Beatdown-Wind Walkers\"}]}")); + Assert.assertEquals(gson.toJson(movieWithNullValue), expectedOutput); + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java new file mode 100644 index 000000000000..554d63b29b86 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java @@ -0,0 +1,27 @@ +package com.baeldung.gson.serialization; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; + +public class IgnoringFieldsNotMatchingCriteriaSerializer implements JsonSerializer { + @Override + public JsonElement serialize(SourceClass src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject jObject = new JsonObject(); + + // Criteria: intValue >= 0 + if (src.getIntValue() >= 0) { + String intValue = "intValue"; + jObject.addProperty(intValue, src.getIntValue()); + } + + String stringValue = "stringValue"; + jObject.addProperty(stringValue, src.getStringValue()); + + return jObject; + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java new file mode 100644 index 000000000000..7f251894a091 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java @@ -0,0 +1,19 @@ +package com.baeldung.gson.serialization; + +import java.lang.reflect.Type; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +public class IgnoringFieldsSerializer implements JsonSerializer { + @Override + public JsonElement serialize(final SourceClass src, final Type typeOfSrc, final JsonSerializationContext context) { + final String intValue = "intValue"; + final JsonObject jObject = new JsonObject(); + jObject.addProperty(intValue, src.getIntValue()); + + return jObject; + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java new file mode 100644 index 000000000000..181f1134b542 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java @@ -0,0 +1,52 @@ +package com.baeldung.gson.serialization; + +public class SourceClass { + private int intValue; + private String stringValue; + + public SourceClass(final int intValue, final String stringValue) { + this.intValue = intValue; + this.stringValue = stringValue; + } + + // API + + public int getIntValue() { + return intValue; + } + + public String getStringValue() { + return stringValue; + } + + // + + @Override + public String toString() { + return "SourceClass{" + "intValue=" + intValue + ", stringValue='" + stringValue + '\'' + '}'; + } + + @Override + public boolean equals(final Object o) { + if (this == o) + return true; + if (!(o instanceof SourceClass)) + return false; + + final SourceClass that = (SourceClass) o; + + if (intValue != that.intValue) + return false; + if (!stringValue.equals(that.stringValue)) + return false; + + return true; + } + + @Override + public int hashCode() { + int result = intValue; + result = 31 * result + stringValue.hashCode(); + return result; + } +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java new file mode 100644 index 000000000000..3b8912d259fb --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java @@ -0,0 +1,95 @@ +package com.baeldung.gson.serialization.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.Date; + +import com.baeldung.gson.serialization.DifferentNameSerializer; +import com.baeldung.gson.serialization.IgnoringFieldsNotMatchingCriteriaSerializer; +import com.baeldung.gson.serialization.IgnoringFieldsSerializer; +import com.baeldung.gson.serialization.SourceClass; + +import org.assertj.core.util.Lists; +import org.joda.time.DateTime; +import org.junit.Test; + + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; + +public class GsonSerializationUnitTest { + + @Test + public void givenArrayOfObjects_whenSerializing_thenCorrect() { + final SourceClass[] sourceArray = { new SourceClass(1, "one"), new SourceClass(2, "two") }; + final String jsonString = new Gson().toJson(sourceArray); + + // test + final String expectedResult = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]"; + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenCollection_whenSerializing_thenCorrect() { + final Collection sourceCollection = Lists.newArrayList(new SourceClass(1, "one"), new SourceClass(2, "two")); + final String jsonCollection = new Gson().toJson(sourceCollection); + + final String expectedResult = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]"; + assertEquals(expectedResult, jsonCollection); + } + + @Test + public void givenUsingCustomSerializer_whenChangingNameOfFieldOnSerializing_thenCorrect() { + final SourceClass sourceObject = new SourceClass(7, "seven"); + final GsonBuilder gsonBuildr = new GsonBuilder(); + gsonBuildr.registerTypeAdapter(SourceClass.class, new DifferentNameSerializer()); + final String jsonString = gsonBuildr.create().toJson(sourceObject); + + final String expectedResult = "{\"otherIntValue\":7,\"otherStringValue\":\"seven\"}"; + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenIgnoringAField_whenSerializingWithCustomSerializer_thenFieldIgnored() { + final SourceClass sourceObject = new SourceClass(7, "seven"); + final GsonBuilder gsonBuildr = new GsonBuilder(); + gsonBuildr.registerTypeAdapter(SourceClass.class, new IgnoringFieldsSerializer()); + final String jsonString = gsonBuildr.create().toJson(sourceObject); + + final String expectedResult = "{\"intValue\":7}"; + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenUsingCustomDeserializer_whenFieldNotMatchesCriteria_thenIgnored() { + final SourceClass sourceObject = new SourceClass(-1, "minus 1"); + final GsonBuilder gsonBuildr = new GsonBuilder(); + gsonBuildr.registerTypeAdapter(SourceClass.class, new IgnoringFieldsNotMatchingCriteriaSerializer()); + final Gson gson = gsonBuildr.create(); + final Type sourceObjectType = new TypeToken() { + }.getType(); + final String jsonString = gson.toJson(sourceObject, sourceObjectType); + + final String expectedResult = "{\"stringValue\":\"minus 1\"}"; + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenDate_whenSerializing_thenCorrect() { + Date sourceDate = new DateTime().withYear(2000).withMonthOfYear(1).withDayOfMonth(1).withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).toDate(); + + final Gson gson = new Gson(); + Type sourceDateType = new TypeToken() { + }.getType(); + String jsonDate = gson.toJson(sourceDate, sourceDateType); + + System.out.println("jsonDate:\n" + jsonDate); + String expectedResult = "\"Jan 1, 2000 12:00:00 AM\""; + assertEquals(expectedResult, jsonDate); + } + +} \ No newline at end of file diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java new file mode 100644 index 000000000000..8e5843552001 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.gson.serialization.test; + +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.nio.file.Files; +import java.nio.file.Paths; + +import com.baeldung.gson.entities.User; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +@RunWith(Parameterized.class) +public class JsonFileUnitTest { + + @Parameter + public Object object; + + @Parameters + public static Object[] data() { + return new Object[] { 123.45, new User(1, "Tom", "American") }; + } + + @Test + public void givenProperData_whenStoredInFile_shouldSaveJsonSuccessfully() { + String filePath = "target/output.json"; + try (Writer writer = new FileWriter(filePath)) { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + gson.toJson(object, writer); + Assert.assertTrue(Files.exists(Paths.get(filePath))); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/json-modules/gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java b/json-modules/gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java new file mode 100644 index 000000000000..d677f0b27105 --- /dev/null +++ b/json-modules/gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java @@ -0,0 +1,104 @@ +package com.baeldung.gson.serializationwithexclusions; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +class SerializationWithExclusionsUnitTest { + + final String expectedResult = "{\"id\":1,\"name\":\"foo\",\"subclass\":{\"id\":42,\"description\":\"the answer\"}}"; + + @Test + public void givenClassWithTransientFields_whenSerializing_thenCorrectWithoutTransientFields() { + MyClassWithTransientFields source = new MyClassWithTransientFields(1L, "foo", "bar", new MySubClassWithTransientFields(42L, "the answer", "Verbose field which we don't want to be serialized")); + String jsonString = new Gson().toJson(source); + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenClassAnnotated_whenSerializing_thenCorrectWithoutNotAnnotatedFields() { + MyClassWithAnnotatedFields source = new MyClassWithAnnotatedFields(1L, "foo", "bar", new MySubClassWithAnnotatedFields(42L, "the answer", "Verbose field which we don't want to be serialized")); + Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation() + .create(); + String jsonString = gson.toJson(source); + + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenExclusionStrategyByClassesAndFields_whenSerializing_thenFollowStrategy() { + MyClass source = new MyClass(1L, "foo", "bar", new MySubClass(42L, "the answer", "Verbose field which we don't want to be serialized")); + ExclusionStrategy strategy = new ExclusionStrategy() { + @Override + public boolean shouldSkipField(FieldAttributes field) { + if (field.getDeclaringClass() == MyClass.class && field.getName() + .equals("other")) + return true; + if (field.getDeclaringClass() == MySubClass.class && field.getName() + .equals("otherVerboseInfo")) + return true; + return false; + } + + @Override + public boolean shouldSkipClass(Class clazz) { + return false; + } + }; + + Gson gson = new GsonBuilder().addSerializationExclusionStrategy(strategy) + .create(); + String jsonString = gson.toJson(source); + + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenExclusionStrategyByStartsWith_whenSerializing_thenFollowStrategy() { + MyClass source = new MyClass(1L, "foo", "bar", new MySubClass(42L, "the answer", "Verbose field which we don't want to be serialized")); + ExclusionStrategy strategy = new ExclusionStrategy() { + @Override + public boolean shouldSkipClass(Class clazz) { + return false; + } + + @Override + public boolean shouldSkipField(FieldAttributes field) { + return field.getName().startsWith("other"); + } + }; + Gson gson = new GsonBuilder().setExclusionStrategies(strategy) + .create(); + String jsonString = gson.toJson(source); + + assertEquals(expectedResult, jsonString); + } + + @Test + public void givenExclusionStrategyByCustomAnnotation_whenSerializing_thenFollowStrategy() { + MyClassWithCustomAnnotatedFields source = new MyClassWithCustomAnnotatedFields(1L, "foo", "bar", new MySubClassWithCustomAnnotatedFields(42L, "the answer", "Verbose field which we don't want to be serialized")); + ExclusionStrategy strategy = new ExclusionStrategy() { + @Override + public boolean shouldSkipClass(Class clazz) { + return false; + } + + @Override + public boolean shouldSkipField(FieldAttributes field) { + return field.getAnnotation(Exclude.class) != null; + } + + }; + + Gson gson = new GsonBuilder().setExclusionStrategies(strategy) + .create(); + String jsonString = gson.toJson(source); + assertEquals(expectedResult, jsonString); + } + +} \ No newline at end of file diff --git a/json-modules/gson/src/test/resources/.gitignore b/json-modules/gson/src/test/resources/.gitignore new file mode 100644 index 000000000000..83c05e60c802 --- /dev/null +++ b/json-modules/gson/src/test/resources/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/json-modules/gson/src/test/resources/logback-test.xml b/json-modules/gson/src/test/resources/logback-test.xml new file mode 100644 index 000000000000..7bd5154680da --- /dev/null +++ b/json-modules/gson/src/test/resources/logback-test.xml @@ -0,0 +1,19 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/json-modules/pom.xml b/json-modules/pom.xml index d8cf8af1b1a5..6d18738a5111 100644 --- a/json-modules/pom.xml +++ b/json-modules/pom.xml @@ -18,6 +18,7 @@ json json-2 json-path + gson diff --git a/pom.xml b/pom.xml index 13ebc74f2f76..a486b0d17c43 100644 --- a/pom.xml +++ b/pom.xml @@ -404,7 +404,6 @@ graphql-modules grpc - gson guava-modules guice @@ -842,7 +841,6 @@ graphql-modules grpc - gson guava-modules guice From 5df613803abc232408d59ad01a9dbb7e56adf418 Mon Sep 17 00:00:00 2001 From: panagiotiskakos Date: Thu, 23 Jun 2022 09:18:17 +0300 Subject: [PATCH 6/7] deleted sub-modules that we moved to json-modules --- gson/.gitignore | 13 - gson/README.md | 16 - gson/pom.xml | 68 -- .../com/baeldung/gson/entities/ActorGson.java | 57 - .../com/baeldung/gson/entities/Animal.java | 5 - .../java/com/baeldung/gson/entities/Cow.java | 19 - .../java/com/baeldung/gson/entities/Dog.java | 18 - .../com/baeldung/gson/entities/Employee.java | 36 - .../com/baeldung/gson/entities/Movie.java | 48 - .../gson/entities/MovieWithNullValue.java | 46 - .../com/baeldung/gson/entities/MyClass.java | 49 - .../java/com/baeldung/gson/entities/User.java | 19 - .../com/baeldung/gson/entities/Weather.java | 40 - .../primitives/models/BooleanExample.java | 9 - .../gson/primitives/models/ByteExample.java | 9 - .../gson/primitives/models/CharExample.java | 9 - .../gson/primitives/models/DoubleExample.java | 9 - .../gson/primitives/models/FloatExample.java | 9 - .../models/InfinityValuesExample.java | 6 - .../gson/primitives/models/LongExample.java | 9 - .../primitives/models/PrimitiveBundle.java | 19 - .../models/PrimitiveBundleInitialized.java | 18 - .../serialization/ActorGsonDeserializer.java | 46 - .../serialization/ActorGsonSerializer.java | 33 - .../serialization/AnimalDeserializer.java | 35 - .../gson/serialization/MapDeserializer.java | 63 -- .../StringDateMapDeserializer.java | 44 - .../serializationwithexclusions/Exclude.java | 11 - .../serializationwithexclusions/MyClass.java | 13 - .../MyClassWithAnnotatedFields.java | 20 - .../MyClassWithCustomAnnotatedFields.java | 16 - .../MyClassWithTransientFields.java | 15 - .../MySubClass.java | 12 - .../MySubClassWithAnnotatedFields.java | 15 - .../MySubClassWithCustomAnnotatedFields.java | 14 - .../MySubClassWithTransientFields.java | 13 - gson/src/main/resources/logback.xml | 19 - .../gson/advance/GsonAdvanceUnitTest.java | 117 -- .../advance/RuntimeTypeAdapterFactory.java | 265 ----- .../JsonObjectConversionsUnitTest.java | 33 - .../baeldung/gson/deserialization/Foo.java | 61 - .../gson/deserialization/FooDeserializer.java | 26 - ...serializerFromJsonWithDifferentFields.java | 21 - .../deserialization/FooInstanceCreator.java | 14 - .../gson/deserialization/FooWithInner.java | 24 - .../gson/deserialization/GenericFoo.java | 18 - .../GsonAlternateUnitTest.java | 39 - .../GsonDeserializeUnitTest.java | 40 - .../MapDeserializationUnitTest.java | 112 -- .../test/GsonDeserializationUnitTest.java | 138 --- .../gson/jsoncompare/JsonCompareUnitTest.java | 95 -- .../primitives/PrimitiveValuesUnitTest.java | 248 ---- .../DifferentNameSerializer.java | 24 - .../serialization/GsonSerializeUnitTest.java | 48 - ...ngFieldsNotMatchingCriteriaSerializer.java | 27 - .../IgnoringFieldsSerializer.java | 19 - .../gson/serialization/SourceClass.java | 52 - .../test/GsonSerializationUnitTest.java | 93 -- .../serialization/test/JsonFileUnitTest.java | 43 - .../SerializationWithExclusionsUnitTest.java | 104 -- gson/src/test/resources/.gitignore | 13 - gson/src/test/resources/logback-test.xml | 19 - json-2/README.md | 13 - json-2/pom.xml | 163 --- .../com/baeldung/jsoniter/model/Name.java | 22 - .../com/baeldung/jsoniter/model/Student.java | 26 - .../baeldung/jsonoptimization/Customer.java | 123 -- .../CustomerDeserializer.java | 49 - .../jsonoptimization/CustomerSerializer.java | 34 - .../jsonoptimization/CustomerShortNames.java | 155 --- .../jsonoptimization/CustomerSlim.java | 73 -- .../CustomerSlimDeserializer.java | 37 - .../CustomerSlimSerializer.java | 28 - .../CustomerSlimShortNames.java | 81 -- .../JsonToJavaClassConversion.java | 56 - .../jsontojavaclass/pojo/SamplePojo.java | 213 ---- .../jsonvalidation/GsonValidator.java | 32 - .../jsonvalidation/JacksonValidator.java | 18 - .../jsonvalidation/JsonValidator.java | 30 - .../jsontojavaclass/pojo/Address.java | 119 -- .../baeldung/jsontojavaclass/pojo/Input.java | 213 ---- json-2/src/main/resources/input.json | 16 - .../baeldung/fastjson/FastJsonUnitTest.java | 95 -- .../java/com/baeldung/fastjson/Person.java | 69 -- .../jsoniter/JsoniterIntroUnitTest.java | 85 -- .../JacksonDeserializationUnitTest.java | 51 - .../jsonldjava/jackson/Person.java | 67 -- .../HydraJsonldSerializationUnitTest.java | 63 -- .../serialization/hydrajsonld/Person.java | 28 - .../JacksonJsonLdSerializationUnitTest.java | 33 - .../serialization/jacksonjsonld/Person.java | 32 - .../JsonOptimizationUnitTest.java | 180 --- .../JsonToJavaClassConversionUnitTest.java | 38 - .../jsonvalidation/GsonValidatorUnitTest.java | 35 - .../JacksonValidatorUnitTest.java | 29 - .../jsonvalidation/JsonValidatorUnitTest.java | 35 - .../moshi/AlternativeAdapterUnitTest.java | 105 -- .../com/baeldung/moshi/ArrayUnitTest.java | 36 - .../moshi/ComplexAdapterUnitTest.java | 94 -- .../com/baeldung/moshi/DefaultUnitTest.java | 68 -- .../com/baeldung/moshi/PrimitiveUnitTest.java | 77 -- .../com/baeldung/moshi/RenameUnitTest.java | 68 -- .../baeldung/moshi/SimpleAdapterUnitTest.java | 129 --- .../com/baeldung/moshi/TransientUnitTest.java | 66 -- json-2/src/test/resources/Student.json | 1 - .../jsontojavaclass/pojo/SamplePojo.java | 213 ---- .../json_optimization_mock_data.json | 1000 ----------------- json-2/src/test/resources/sample_input.json | 13 - json-path/.gitignore | 13 - json-path/README.md | 8 - json-path/pom.xml | 30 - json-path/src/main/resources/intro_api.json | 57 - .../src/main/resources/intro_service.json | 61 - json-path/src/main/resources/intro_user.json | 46 - json-path/src/main/resources/logback.xml | 13 - .../src/main/resources/online_store.json | 23 - .../introduction/JsonPathUnitTest.java | 46 - .../OperationIntegrationTest.java | 74 -- .../introduction/ServiceIntegrationTest.java | 101 -- json-path/src/test/resources/logback.xml | 19 - json/README.md | 16 - json/pom.xml | 84 -- .../com/baeldung/adapter/PersonAdapter.java | 26 - .../java/com/baeldung/escape/JsonEscape.java | 41 - .../main/java/com/baeldung/jsonb/Person.java | 127 --- .../java/com/baeldung/jsonjava/CDLDemo.java | 59 - .../com/baeldung/jsonjava/CookieDemo.java | 30 - .../java/com/baeldung/jsonjava/DemoBean.java | 26 - .../java/com/baeldung/jsonjava/HTTPDemo.java | 27 - .../com/baeldung/jsonjava/JSONArrayDemo.java | 52 - .../jsonjava/JSONArrayGetValueByKey.java | 30 - .../com/baeldung/jsonjava/JSONObjectDemo.java | 46 - .../baeldung/jsonjava/JSONTokenerDemo.java | 13 - .../baeldung/jsonjava/ObjectToFromJSON.java | 21 - .../iterate/JSONObjectIterator.java | 50 - .../baeldung/jsonpointer/JsonPointerCrud.java | 95 -- json/src/main/resources/logback.xml | 13 - json/src/main/webapp/index.html | 27 - json/src/main/webapp/js/app.js | 15 - json/src/main/webapp/js/schema.js | 27 - json/src/main/webapp/js/ui-schema.js | 22 - json/src/main/webapp/package.json | 11 - .../baeldung/escape/JsonEscapeUnitTest.java | 36 - .../json/schema/JSONSchemaUnitTest.java | 32 - .../com/baeldung/jsonb/JsonbUnitTest.java | 189 ---- .../baeldung/jsonjava/CDLIntegrationTest.java | 62 - .../jsonjava/CookieIntegrationTest.java | 34 - .../jsonjava/HTTPIntegrationTest.java | 29 - .../JSONArrayGetValueByKeyUnitTest.java | 35 - .../jsonjava/JSONArrayIntegrationTest.java | 53 - .../jsonjava/JSONObjectIntegrationTest.java | 45 - .../jsonjava/JSONTokenerIntegrationTest.java | 22 - .../ObjectToFromJSONIntegrationTest.java | 22 - .../iterate/JSONObjectIteratorUnitTest.java | 79 -- .../jsonpointer/JsonPointerCrudUnitTest.java | 59 - json/src/test/resources/address.json | 4 - json/src/test/resources/books.json | 7 - json/src/test/resources/product_invalid.json | 5 - json/src/test/resources/product_valid.json | 5 - json/src/test/resources/schema.json | 22 - 160 files changed, 8893 deletions(-) delete mode 100644 gson/.gitignore delete mode 100644 gson/README.md delete mode 100644 gson/pom.xml delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/ActorGson.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/Animal.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/Cow.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/Dog.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/Employee.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/Movie.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/MyClass.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/User.java delete mode 100644 gson/src/main/java/com/baeldung/gson/entities/Weather.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java delete mode 100644 gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java delete mode 100644 gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java delete mode 100644 gson/src/main/resources/logback.xml delete mode 100644 gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java delete mode 100644 gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/Foo.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java delete mode 100644 gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java delete mode 100644 gson/src/test/resources/.gitignore delete mode 100644 gson/src/test/resources/logback-test.xml delete mode 100644 json-2/README.md delete mode 100644 json-2/pom.xml delete mode 100644 json-2/src/main/java/com/baeldung/jsoniter/model/Name.java delete mode 100644 json-2/src/main/java/com/baeldung/jsoniter/model/Student.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java delete mode 100644 json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java delete mode 100644 json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java delete mode 100644 json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java delete mode 100644 json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java delete mode 100644 json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java delete mode 100644 json-2/src/main/resources/input.json delete mode 100644 json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/fastjson/Person.java delete mode 100644 json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java delete mode 100644 json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java delete mode 100644 json-2/src/test/resources/Student.json delete mode 100644 json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java delete mode 100644 json-2/src/test/resources/json_optimization_mock_data.json delete mode 100644 json-2/src/test/resources/sample_input.json delete mode 100644 json-path/.gitignore delete mode 100644 json-path/README.md delete mode 100644 json-path/pom.xml delete mode 100644 json-path/src/main/resources/intro_api.json delete mode 100644 json-path/src/main/resources/intro_service.json delete mode 100644 json-path/src/main/resources/intro_user.json delete mode 100644 json-path/src/main/resources/logback.xml delete mode 100644 json-path/src/main/resources/online_store.json delete mode 100644 json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java delete mode 100644 json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java delete mode 100644 json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java delete mode 100644 json-path/src/test/resources/logback.xml delete mode 100644 json/README.md delete mode 100644 json/pom.xml delete mode 100644 json/src/main/java/com/baeldung/adapter/PersonAdapter.java delete mode 100644 json/src/main/java/com/baeldung/escape/JsonEscape.java delete mode 100644 json/src/main/java/com/baeldung/jsonb/Person.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/CDLDemo.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/CookieDemo.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/DemoBean.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java delete mode 100644 json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java delete mode 100644 json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java delete mode 100644 json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java delete mode 100644 json/src/main/resources/logback.xml delete mode 100644 json/src/main/webapp/index.html delete mode 100644 json/src/main/webapp/js/app.js delete mode 100644 json/src/main/webapp/js/schema.js delete mode 100644 json/src/main/webapp/js/ui-schema.js delete mode 100644 json/src/main/webapp/package.json delete mode 100644 json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java delete mode 100644 json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java delete mode 100644 json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java delete mode 100644 json/src/test/resources/address.json delete mode 100644 json/src/test/resources/books.json delete mode 100644 json/src/test/resources/product_invalid.json delete mode 100644 json/src/test/resources/product_valid.json delete mode 100644 json/src/test/resources/schema.json diff --git a/gson/.gitignore b/gson/.gitignore deleted file mode 100644 index 83c05e60c802..000000000000 --- a/gson/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/gson/README.md b/gson/README.md deleted file mode 100644 index 4255e2ead912..000000000000 --- a/gson/README.md +++ /dev/null @@ -1,16 +0,0 @@ -## GSON - -This module contains articles about Gson - -### Relevant Articles: - -- [Gson Deserialization Cookbook](https://www.baeldung.com/gson-deserialization-guide) -- [Jackson vs Gson](https://www.baeldung.com/jackson-vs-gson) -- [Exclude Fields from Serialization in Gson](https://www.baeldung.com/gson-exclude-fields-serialization) -- [Save Data to a JSON File with Gson](https://www.baeldung.com/gson-save-file) -- [Convert JSON to a Map Using Gson](https://www.baeldung.com/gson-json-to-map) -- [Working with Primitive Values in Gson](https://www.baeldung.com/java-gson-primitives) -- [Convert String to JsonObject with Gson](https://www.baeldung.com/gson-string-to-jsonobject) -- [Mapping Multiple JSON Fields to a Single Java Field](https://www.baeldung.com/json-multiple-fields-single-java-field) -- [Serializing and Deserializing a List with Gson](https://www.baeldung.com/gson-list) -- [Compare Two JSON Objects with Gson](https://www.baeldung.com/gson-compare-json-objects) diff --git a/gson/pom.xml b/gson/pom.xml deleted file mode 100644 index 082e53baf0dc..000000000000 --- a/gson/pom.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - 4.0.0 - gson - 0.1-SNAPSHOT - gson - - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - - - - - - org.projectlombok - lombok - ${lombok.version} - provided - - - joda-time - joda-time - ${joda-time.version} - - - commons-io - commons-io - ${commons-io.version} - - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - - com.google.code.gson - gson - ${gson.version} - - - - - gson - - - src/main/resources - true - - - - - - 2.8.0 - 2.9.6 - - - \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/entities/ActorGson.java b/gson/src/main/java/com/baeldung/gson/entities/ActorGson.java deleted file mode 100644 index a68dba243629..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/ActorGson.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.baeldung.gson.entities; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; - -public class ActorGson { - - private String imdbId; - private Date dateOfBirth; - private List filmography; - - public ActorGson(String imdbId, Date dateOfBirth, List filmography) { - super(); - this.imdbId = imdbId; - this.dateOfBirth = dateOfBirth; - this.filmography = filmography; - } - - @Override - public String toString() { - return "ActorGson [imdbId=" + imdbId + ", dateOfBirth=" + formatDateOfBirth() + ", filmography=" + filmography + "]"; - } - - public String getImdbId() { - return imdbId; - } - - public void setImdbId(String imdbId) { - this.imdbId = imdbId; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - public List getFilmography() { - return filmography; - } - - public void setFilmography(List filmography) { - this.filmography = filmography; - } - - private String formatDateOfBirth() { - final DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy"); - formatter.setTimeZone(TimeZone.getTimeZone("GMT")); - return formatter.format(dateOfBirth); - } - -} \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/entities/Animal.java b/gson/src/main/java/com/baeldung/gson/entities/Animal.java deleted file mode 100644 index 6c0f4a6e4e41..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/Animal.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.gson.entities; - -public abstract class Animal { - public String type = "Animal"; -} diff --git a/gson/src/main/java/com/baeldung/gson/entities/Cow.java b/gson/src/main/java/com/baeldung/gson/entities/Cow.java deleted file mode 100644 index 5bd8d23f44b7..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/Cow.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.gson.entities; - -public class Cow extends Animal { - private String breed; - - public Cow() { - breed = "Jersey"; - type = "Cow"; - } - - public String getBreed() { - return breed; - } - - public void setBreed(String breed) { - this.breed = breed; - } -} - diff --git a/gson/src/main/java/com/baeldung/gson/entities/Dog.java b/gson/src/main/java/com/baeldung/gson/entities/Dog.java deleted file mode 100644 index ac555738669f..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/Dog.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.gson.entities; - -public class Dog extends Animal { - private String petName; - - public Dog() { - petName = "Milo"; - type = "Dog"; - } - - public String getPetName() { - return petName; - } - - public void setPetName(String petName) { - this.petName = petName; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/entities/Employee.java b/gson/src/main/java/com/baeldung/gson/entities/Employee.java deleted file mode 100644 index ecc4571dccbd..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/Employee.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.gson.entities; - -public class Employee { - private int id; - private String name; - private String address; - - public Employee(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/entities/Movie.java b/gson/src/main/java/com/baeldung/gson/entities/Movie.java deleted file mode 100644 index ebc4cff1372a..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/Movie.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.baeldung.gson.entities; - -import java.util.List; - -public class Movie { - - private String imdbId; - private String director; - private List actors; - - public Movie(String imdbID, String director, List actors) { - super(); - this.imdbId = imdbID; - this.director = director; - this.actors = actors; - } - - @Override - public String toString() { - return "Movie [imdbId=" + imdbId + ", director=" + director + ", actors=" + actors + "]"; - } - - public String getImdbID() { - return imdbId; - } - - public void setImdbID(String imdbID) { - this.imdbId = imdbID; - } - - public String getDirector() { - return director; - } - - public void setDirector(String director) { - this.director = director; - } - - public List getActors() { - return actors; - } - - public void setActors(List actors) { - this.actors = actors; - } - - -} \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java b/gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java deleted file mode 100644 index 381d7cb83b5c..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/MovieWithNullValue.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.gson.entities; - -import com.google.gson.annotations.Expose; - -import java.util.List; - -public class MovieWithNullValue { - - @Expose - private String imdbId; - private String director; - - @Expose - private List actors; - - public MovieWithNullValue(String imdbID, String director, List actors) { - super(); - this.imdbId = imdbID; - this.director = director; - this.actors = actors; - } - - public String getImdbID() { - return imdbId; - } - - public void setImdbID(String imdbID) { - this.imdbId = imdbID; - } - - public String getDirector() { - return director; - } - - public void setDirector(String director) { - this.director = director; - } - - public List getActors() { - return actors; - } - - public void setActors(List actors) { - this.actors = actors; - } -} \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/entities/MyClass.java b/gson/src/main/java/com/baeldung/gson/entities/MyClass.java deleted file mode 100644 index 66a1887414cd..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/MyClass.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.baeldung.gson.entities; - -import java.util.Objects; - -public class MyClass { - private int id; - private String name; - - public MyClass(int id, String name) { - this.id = id; - this.name = name; - } - - public MyClass() { } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - MyClass myClass = (MyClass) o; - return id == myClass.id && Objects.equals(name, myClass.name); - } - - @Override - public int hashCode() { - - return Objects.hash(id, name); - } -} diff --git a/gson/src/main/java/com/baeldung/gson/entities/User.java b/gson/src/main/java/com/baeldung/gson/entities/User.java deleted file mode 100644 index d821ef555234..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/User.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.gson.entities; - -public class User { - - private int id; - private String name; - private transient String nationality; - - public User(int id, String name, String nationality) { - this.id = id; - this.name = name; - this.nationality = nationality; - } - - public User(int id, String name) { - this(id, name, null); - } - -} diff --git a/gson/src/main/java/com/baeldung/gson/entities/Weather.java b/gson/src/main/java/com/baeldung/gson/entities/Weather.java deleted file mode 100644 index b68ec4c6d4e2..000000000000 --- a/gson/src/main/java/com/baeldung/gson/entities/Weather.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.gson.entities; - -import com.google.gson.annotations.SerializedName; - -public class Weather { - - @SerializedName(value = "location", alternate = "place") - private String location; - - @SerializedName(value = "temp", alternate = "temperature") - private int temp; - - @SerializedName(value = "outlook", alternate = "weather") - private String outlook; - - public String getLocation() { - return location; - } - - public void setLocation(String location) { - this.location = location; - } - - public int getTemp() { - return temp; - } - - public void setTemp(int temp) { - this.temp = temp; - } - - public String getOutlook() { - return outlook; - } - - public void setOutlook(String outlook) { - this.outlook = outlook; - } - -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java b/gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java deleted file mode 100644 index 1f05fc611935..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/BooleanExample.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class BooleanExample { - public boolean value; - - public String toString() { - return "{boolean: " + value + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java b/gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java deleted file mode 100644 index 6ec4e42ea395..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/ByteExample.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class ByteExample { - public byte value = (byte) 1; - - public String toString() { - return "{byte: " + value + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java b/gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java deleted file mode 100644 index 69d1a95fcdc2..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/CharExample.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class CharExample { - public char value; - - public String toString() { - return "{char: " + value + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java b/gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java deleted file mode 100644 index 7c9db2bd50c5..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/DoubleExample.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class DoubleExample { - public double value; - - public String toString() { - return "{float: " + value + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java b/gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java deleted file mode 100644 index 86c0c4802c56..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/FloatExample.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class FloatExample { - public float value; - - public String toString() { - return "{float: " + value + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java b/gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java deleted file mode 100644 index 90f10c075169..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/InfinityValuesExample.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class InfinityValuesExample { - public float negativeInfinity; - public float positiveInfinity; -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java b/gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java deleted file mode 100644 index 021de1d06d55..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/LongExample.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class LongExample { - public long value = 1; - - public String toString() { - return "{byte: " + value + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java b/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java deleted file mode 100644 index 10134110f3c7..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundle.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class PrimitiveBundle { - public byte byteValue; - public short shortValue; - public int intValue; - public long longValue; - public float floatValue; - public double doubleValue; - public boolean booleanValue; - public char charValue; - - public String toString() { - return "{" + "byte: " + byteValue + ", " + "short: " + shortValue + ", " - + "int: " + intValue + ", " + "long: " + longValue + ", " - + "float: " + floatValue + ", " + "double: " + doubleValue + ", " - + "boolean: " + booleanValue + ", " + "char: " + charValue + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java b/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java deleted file mode 100644 index c6eb6ca26753..000000000000 --- a/gson/src/main/java/com/baeldung/gson/primitives/models/PrimitiveBundleInitialized.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.gson.primitives.models; - -public class PrimitiveBundleInitialized { - // @formatter:off - public byte byteValue = (byte) 1; - public short shortValue = (short) 1; - public int intValue = 1; - public long longValue = 1L; - public float floatValue = 1.0f; - public double doubleValue = 1; - // @formatter:on - - public String toString() { - return "{" + "byte: " + byteValue + ", " + "short: " + shortValue + ", " - + "int: " + intValue + ", " + "long: " + longValue + ", " - + "float: " + floatValue + ", " + "double: " + doubleValue + "}"; - } -} diff --git a/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java b/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java deleted file mode 100644 index 34c9f83888fe..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonDeserializer.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.gson.serialization; - -import java.lang.reflect.Type; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; - -import com.baeldung.gson.entities.ActorGson; - -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; - -public class ActorGsonDeserializer implements JsonDeserializer { - - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); - - @Override - public ActorGson deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { - - final JsonObject jsonObject = json.getAsJsonObject(); - - final JsonElement jsonImdbId = jsonObject.get("imdbId"); - final JsonElement jsonDateOfBirth = jsonObject.get("dateOfBirth"); - final JsonArray jsonFilmography = jsonObject.getAsJsonArray("filmography"); - - final ArrayList filmList = new ArrayList(); - if (jsonFilmography != null) { - for (int i = 0; i < jsonFilmography.size(); i++) { - filmList.add(jsonFilmography.get(i).getAsString()); - } - } - - ActorGson actorGson = null; - try { - actorGson = new ActorGson(jsonImdbId.getAsString(), sdf.parse(jsonDateOfBirth.getAsString()), filmList); - } catch (final ParseException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return actorGson; - } -} \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java b/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java deleted file mode 100644 index 4ca653f76bf5..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serialization/ActorGsonSerializer.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.gson.serialization; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import com.baeldung.gson.entities.ActorGson; - -import java.lang.reflect.Type; -import java.text.SimpleDateFormat; -import java.util.List; -import java.util.stream.Collectors; - -public class ActorGsonSerializer implements JsonSerializer { - - private SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - - @Override - public JsonElement serialize(ActorGson actor, Type type, JsonSerializationContext jsonSerializationContext) { - - JsonObject actorJsonObj = new JsonObject(); - actorJsonObj.addProperty("IMDB Code", actor.getImdbId()); - actorJsonObj.addProperty("Date Of Birth", actor.getDateOfBirth() != null ? sdf.format(actor.getDateOfBirth()) : null); - actorJsonObj.addProperty("N° Film: ", actor.getFilmography() != null ? actor.getFilmography().size() : null); - actorJsonObj.addProperty("filmography", actor.getFilmography() != null ? convertFilmography(actor.getFilmography()) : null); - - return actorJsonObj; - } - - private String convertFilmography(List filmography) { - return filmography.stream().collect(Collectors.joining("-")); - } -} \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java b/gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java deleted file mode 100644 index 6c72ddb0da2e..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serialization/AnimalDeserializer.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.gson.serialization; - -import com.google.gson.Gson; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import java.lang.reflect.Type; -import java.util.HashMap; -import java.util.Map; -import com.baeldung.gson.entities.Animal; - -public class AnimalDeserializer implements JsonDeserializer { - private String animalTypeElementName; - private Gson gson; - private Map> animalTypeRegistry; - - public AnimalDeserializer(String animalTypeElementName) { - this.animalTypeElementName = animalTypeElementName; - this.gson = new Gson(); - this.animalTypeRegistry = new HashMap<>(); - } - - public void registerBarnType(String animalTypeName, Class animalType) { - animalTypeRegistry.put(animalTypeName, animalType); - } - - public Animal deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) { - JsonObject animalObject = json.getAsJsonObject(); - JsonElement animalTypeElement = animalObject.get(animalTypeElementName); - - Class animalType = animalTypeRegistry.get(animalTypeElement.getAsString()); - return gson.fromJson(animalObject, animalType); - } -} \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java b/gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java deleted file mode 100644 index 1954986547ef..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serialization/MapDeserializer.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.gson.serialization; - -import java.lang.reflect.Type; -import java.math.BigDecimal; -import java.util.Map; -import java.util.stream.Collectors; - -import com.baeldung.gson.entities.Employee; - -import com.google.gson.*; - -public class MapDeserializer implements JsonDeserializer> { - - @Override - public Map deserialize(JsonElement elem, Type type, JsonDeserializationContext context) throws JsonParseException { - - return elem.getAsJsonObject() - .entrySet() - .stream() - .collect(Collectors.toMap( - Map.Entry::getKey, - e -> e.getValue().isJsonPrimitive() ? - toPrimitive(e.getValue().getAsJsonPrimitive(), context) - : context.deserialize(e.getValue(), Employee.class) - )); - } - - private Object toPrimitive(JsonPrimitive jsonValue, JsonDeserializationContext context) { - if (jsonValue.isBoolean()) - return jsonValue.getAsBoolean(); - else if (jsonValue.isString()) - return jsonValue.getAsString(); - else { - BigDecimal bigDec = jsonValue.getAsBigDecimal(); - Long l; - Integer i; - if ((i = toInteger(bigDec)) != null) { - return i; - } else if ((l = toLong(bigDec)) != null) { - return l; - } else { - return bigDec.doubleValue(); - } - } - } - - private Long toLong(BigDecimal val) { - try { - return val.toBigIntegerExact().longValue(); - } catch (ArithmeticException e) { - return null; - } - } - - private Integer toInteger(BigDecimal val) { - try { - return val.intValueExact(); - } catch (ArithmeticException e) { - return null; - } - } - -} diff --git a/gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java b/gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java deleted file mode 100644 index fa9d7d22400f..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serialization/StringDateMapDeserializer.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.gson.serialization; - -import java.lang.reflect.Type; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; - -public class StringDateMapDeserializer implements JsonDeserializer> { - - private static final Logger logger = LoggerFactory.getLogger(StringDateMapDeserializer.class); - - private SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - @Override - public Map deserialize(JsonElement elem, Type type, JsonDeserializationContext jsonDeserializationContext) { - System.out.println("Deserializer called"); - logger.info("Deserializer called"); - return elem.getAsJsonObject() - .entrySet() - .stream() - .filter(e -> e.getValue().isJsonPrimitive()) - .filter(e -> e.getValue().getAsJsonPrimitive().isString()) - .collect(Collectors.toMap(Map.Entry::getKey, e -> formatDate(e.getValue()))); - } - - private Date formatDate(JsonElement value) { - try { - return format.parse(value.getAsString()); - } catch (ParseException ex) { - throw new JsonParseException(ex); - } - } - -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java deleted file mode 100644 index d3067e3482a6..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/Exclude.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface Exclude { -} \ No newline at end of file diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java deleted file mode 100644 index 891979272189..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClass.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MyClass { - private long id; - private String name; - private String other; - private MySubClass subclass; -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java deleted file mode 100644 index 4c38df1eac7a..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithAnnotatedFields.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import com.google.gson.annotations.Expose; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MyClassWithAnnotatedFields { - - @Expose - private long id; - @Expose - private String name; - private String other; - @Expose - private MySubClassWithAnnotatedFields subclass; - -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java deleted file mode 100644 index 85871be03d7f..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithCustomAnnotatedFields.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MyClassWithCustomAnnotatedFields { - - private long id; - private String name; - @Exclude - private String other; - private MySubClassWithCustomAnnotatedFields subclass; - -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java deleted file mode 100644 index dfb9d4bd6ec9..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MyClassWithTransientFields.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MyClassWithTransientFields { - - private long id; - private String name; - private transient String other; - private MySubClassWithTransientFields subclass; - -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java deleted file mode 100644 index 6b8a28702085..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClass.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MySubClass { - private long id; - private String description; - private String otherVerboseInfo; -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java deleted file mode 100644 index 0c94e8f2ccff..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithAnnotatedFields.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import com.google.gson.annotations.Expose; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MySubClassWithAnnotatedFields { - - @Expose private long id; - @Expose private String description; - private String otherVerboseInfo; -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java deleted file mode 100644 index 0bd9a149cb4a..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithCustomAnnotatedFields.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MySubClassWithCustomAnnotatedFields { - - private long id; - private String description; - @Exclude - private String otherVerboseInfo; -} diff --git a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java b/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java deleted file mode 100644 index 817d2ee55738..000000000000 --- a/gson/src/main/java/com/baeldung/gson/serializationwithexclusions/MySubClassWithTransientFields.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class MySubClassWithTransientFields { - - private long id; - private String description; - private transient String otherVerboseInfo; -} diff --git a/gson/src/main/resources/logback.xml b/gson/src/main/resources/logback.xml deleted file mode 100644 index 7bd5154680da..000000000000 --- a/gson/src/main/resources/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java b/gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java deleted file mode 100644 index d4adb6e40670..000000000000 --- a/gson/src/test/java/com/baeldung/gson/advance/GsonAdvanceUnitTest.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.baeldung.gson.advance; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import com.baeldung.gson.entities.Dog; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import com.baeldung.gson.entities.Animal; -import com.baeldung.gson.entities.Cow; -import com.baeldung.gson.entities.MyClass; -import com.baeldung.gson.serialization.AnimalDeserializer; -import org.junit.Test; - -public class GsonAdvanceUnitTest { - - @Test - public void givenListOfMyClass_whenSerializing_thenCorrect() { - List list = Arrays.asList(new MyClass(1, "name1"), new MyClass(2, "name2")); - - Gson gson = new Gson(); - String jsonString = gson.toJson(list); - String expectedString = "[{\"id\":1,\"name\":\"name1\"},{\"id\":2,\"name\":\"name2\"}]"; - - assertEquals(expectedString, jsonString); - } - - @Test(expected = ClassCastException.class) - public void givenJsonString_whenIncorrectDeserializing_thenThrowClassCastException() { - String inputString = "[{\"id\":1,\"name\":\"name1\"},{\"id\":2,\"name\":\"name2\"}]"; - - Gson gson = new Gson(); - List outputList = gson.fromJson(inputString, ArrayList.class); - - assertEquals(1, outputList.get(0).getId()); - } - - @Test - public void givenJsonString_whenDeserializing_thenReturnListOfMyClass() { - String inputString = "[{\"id\":1,\"name\":\"name1\"},{\"id\":2,\"name\":\"name2\"}]"; - List inputList = Arrays.asList(new MyClass(1, "name1"), new MyClass(2, "name2")); - - Type listOfMyClassObject = new TypeToken>() {}.getType(); - - Gson gson = new Gson(); - List outputList = gson.fromJson(inputString, listOfMyClassObject); - - assertEquals(inputList, outputList); - } - - @Test - public void givenPolymorphicList_whenSerializeWithTypeAdapter_thenCorrect() { - String expectedString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; - - List inList = new ArrayList<>(); - inList.add(new Dog()); - inList.add(new Cow()); - - String jsonString = new Gson().toJson(inList); - - assertEquals(expectedString, jsonString); - } - - @Test - public void givenPolymorphicList_whenDeserializeWithTypeAdapter_thenCorrect() { - String inputString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; - - AnimalDeserializer deserializer = new AnimalDeserializer("type"); - deserializer.registerBarnType("Dog", Dog.class); - deserializer.registerBarnType("Cow", Cow.class); - Gson gson = new GsonBuilder() - .registerTypeAdapter(Animal.class, deserializer) - .create(); - - List outList = gson.fromJson(inputString, new TypeToken>(){}.getType()); - - assertEquals(2, outList.size()); - assertTrue(outList.get(0) instanceof Dog); - assertTrue(outList.get(1) instanceof Cow); - } - - @Test - public void givenPolymorphicList_whenSerializeWithRuntimeTypeAdapter_thenCorrect() { - String expectedString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; - - List inList = new ArrayList<>(); - inList.add(new Dog()); - inList.add(new Cow()); - String jsonString = new Gson().toJson(inList); - - assertEquals(expectedString, jsonString); - } - - @Test - public void givenPolymorphicList_whenDeserializeWithRuntimeTypeAdapter_thenCorrect() { - String inputString = "[{\"petName\":\"Milo\",\"type\":\"Dog\"},{\"breed\":\"Jersey\",\"type\":\"Cow\"}]"; - - Type listOfAnimals = new TypeToken>() {}.getType(); - - RuntimeTypeAdapterFactory adapter = RuntimeTypeAdapterFactory.of(Animal.class, "type") - .registerSubtype(Dog.class) - .registerSubtype(Cow.class); - - Gson gson = new GsonBuilder().registerTypeAdapterFactory(adapter).create(); - - List outList = gson.fromJson(inputString, listOfAnimals); - - assertEquals(2, outList.size()); - assertTrue(outList.get(0) instanceof Dog); - assertTrue(outList.get(1) instanceof Cow); - } -} \ No newline at end of file diff --git a/gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java b/gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java deleted file mode 100644 index aab3f5f3f1fa..000000000000 --- a/gson/src/test/java/com/baeldung/gson/advance/RuntimeTypeAdapterFactory.java +++ /dev/null @@ -1,265 +0,0 @@ -package com.baeldung.gson.advance; - -/* - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.TypeAdapter; -import com.google.gson.TypeAdapterFactory; -import com.google.gson.internal.Streams; -import com.google.gson.reflect.TypeToken; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; - -/** - * Adapts values whose runtime type may differ from their declaration type. This - * is necessary when a field's type is not the same type that GSON should create - * when deserializing that field. For example, consider these types: - *
   {@code
- *   abstract class Shape {
- *     int x;
- *     int y;
- *   }
- *   class Circle extends Shape {
- *     int radius;
- *   }
- *   class Rectangle extends Shape {
- *     int width;
- *     int height;
- *   }
- *   class Diamond extends Shape {
- *     int width;
- *     int height;
- *   }
- *   class Drawing {
- *     Shape bottomShape;
- *     Shape topShape;
- *   }
- * }
- *

Without additional type information, the serialized JSON is ambiguous. Is - * the bottom shape in this drawing a rectangle or a diamond?

   {@code
- *   {
- *     "bottomShape": {
- *       "width": 10,
- *       "height": 5,
- *       "x": 0,
- *       "y": 0
- *     },
- *     "topShape": {
- *       "radius": 2,
- *       "x": 4,
- *       "y": 1
- *     }
- *   }}
- * This class addresses this problem by adding type information to the - * serialized JSON and honoring that type information when the JSON is - * deserialized:
   {@code
- *   {
- *     "bottomShape": {
- *       "type": "Diamond",
- *       "width": 10,
- *       "height": 5,
- *       "x": 0,
- *       "y": 0
- *     },
- *     "topShape": {
- *       "type": "Circle",
- *       "radius": 2,
- *       "x": 4,
- *       "y": 1
- *     }
- *   }}
- * Both the type field name ({@code "type"}) and the type labels ({@code - * "Rectangle"}) are configurable. - * - *

Registering Types

- * Create a {@code RuntimeTypeAdapterFactory} by passing the base type and type field - * name to the {@link #of} factory method. If you don't supply an explicit type - * field name, {@code "type"} will be used.
   {@code
- *   RuntimeTypeAdapterFactory shapeAdapterFactory
- *       = RuntimeTypeAdapterFactory.of(Shape.class, "type");
- * }
- * Next register all of your subtypes. Every subtype must be explicitly - * registered. This protects your application from injection attacks. If you - * don't supply an explicit type label, the type's simple name will be used. - *
   {@code
- *   shapeAdapterFactory.registerSubtype(Rectangle.class, "Rectangle");
- *   shapeAdapterFactory.registerSubtype(Circle.class, "Circle");
- *   shapeAdapterFactory.registerSubtype(Diamond.class, "Diamond");
- * }
- * Finally, register the type adapter factory in your application's GSON builder: - *
   {@code
- *   Gson gson = new GsonBuilder()
- *       .registerTypeAdapterFactory(shapeAdapterFactory)
- *       .create();
- * }
- * Like {@code GsonBuilder}, this API supports chaining:
   {@code
- *   RuntimeTypeAdapterFactory shapeAdapterFactory = RuntimeTypeAdapterFactory.of(Shape.class)
- *       .registerSubtype(Rectangle.class)
- *       .registerSubtype(Circle.class)
- *       .registerSubtype(Diamond.class);
- * }
- */ -public final class RuntimeTypeAdapterFactory implements TypeAdapterFactory { - private final Class baseType; - private final String typeFieldName; - private final Map> labelToSubtype = new LinkedHashMap>(); - private final Map, String> subtypeToLabel = new LinkedHashMap, String>(); - private final boolean maintainType; - - private RuntimeTypeAdapterFactory(Class baseType, String typeFieldName, boolean maintainType) { - if (typeFieldName == null || baseType == null) { - throw new NullPointerException(); - } - this.baseType = baseType; - this.typeFieldName = typeFieldName; - this.maintainType = maintainType; - } - - /** - * Creates a new runtime type adapter using for {@code baseType} using {@code - * typeFieldName} as the type field name. Type field names are case sensitive. - * {@code maintainType} flag decide if the type will be stored in pojo or not. - */ - public static RuntimeTypeAdapterFactory of(Class baseType, String typeFieldName, boolean maintainType) { - return new RuntimeTypeAdapterFactory(baseType, typeFieldName, maintainType); - } - - /** - * Creates a new runtime type adapter using for {@code baseType} using {@code - * typeFieldName} as the type field name. Type field names are case sensitive. - */ - public static RuntimeTypeAdapterFactory of(Class baseType, String typeFieldName) { - return new RuntimeTypeAdapterFactory(baseType, typeFieldName, false); - } - - /** - * Creates a new runtime type adapter for {@code baseType} using {@code "type"} as - * the type field name. - */ - public static RuntimeTypeAdapterFactory of(Class baseType) { - return new RuntimeTypeAdapterFactory(baseType, "type", false); - } - - /** - * Registers {@code type} identified by {@code label}. Labels are case - * sensitive. - * - * @throws IllegalArgumentException if either {@code type} or {@code label} - * have already been registered on this type adapter. - */ - public RuntimeTypeAdapterFactory registerSubtype(Class type, String label) { - if (type == null || label == null) { - throw new NullPointerException(); - } - if (subtypeToLabel.containsKey(type) || labelToSubtype.containsKey(label)) { - throw new IllegalArgumentException("types and labels must be unique"); - } - labelToSubtype.put(label, type); - subtypeToLabel.put(type, label); - return this; - } - - /** - * Registers {@code type} identified by its {@link Class#getSimpleName simple - * name}. Labels are case sensitive. - * - * @throws IllegalArgumentException if either {@code type} or its simple name - * have already been registered on this type adapter. - */ - public RuntimeTypeAdapterFactory registerSubtype(Class type) { - return registerSubtype(type, type.getSimpleName()); - } - - public TypeAdapter create(Gson gson, TypeToken type) { - if (type.getRawType() != baseType) { - return null; - } - - final Map> labelToDelegate - = new LinkedHashMap>(); - final Map, TypeAdapter> subtypeToDelegate - = new LinkedHashMap, TypeAdapter>(); - for (Map.Entry> entry : labelToSubtype.entrySet()) { - TypeAdapter delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); - labelToDelegate.put(entry.getKey(), delegate); - subtypeToDelegate.put(entry.getValue(), delegate); - } - - return new TypeAdapter() { - @Override public R read(JsonReader in) throws IOException { - JsonElement jsonElement = Streams.parse(in); - JsonElement labelJsonElement; - if (maintainType) { - labelJsonElement = jsonElement.getAsJsonObject().get(typeFieldName); - } else { - labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName); - } - - if (labelJsonElement == null) { - throw new JsonParseException("cannot deserialize " + baseType - + " because it does not define a field named " + typeFieldName); - } - String label = labelJsonElement.getAsString(); - @SuppressWarnings("unchecked") // registration requires that subtype extends T - TypeAdapter delegate = (TypeAdapter) labelToDelegate.get(label); - if (delegate == null) { - throw new JsonParseException("cannot deserialize " + baseType + " subtype named " - + label + "; did you forget to register a subtype?"); - } - return delegate.fromJsonTree(jsonElement); - } - - @Override public void write(JsonWriter out, R value) throws IOException { - Class srcType = value.getClass(); - String label = subtypeToLabel.get(srcType); - @SuppressWarnings("unchecked") // registration requires that subtype extends T - TypeAdapter delegate = (TypeAdapter) subtypeToDelegate.get(srcType); - if (delegate == null) { - throw new JsonParseException("cannot serialize " + srcType.getName() - + "; did you forget to register a subtype?"); - } - JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); - - if (maintainType) { - Streams.write(jsonObject, out); - return; - } - - JsonObject clone = new JsonObject(); - - if (jsonObject.has(typeFieldName)) { - throw new JsonParseException("cannot serialize " + srcType.getName() - + " because it already defines a field named " + typeFieldName); - } - clone.add(typeFieldName, new JsonPrimitive(label)); - - for (Map.Entry e : jsonObject.entrySet()) { - clone.add(e.getKey(), e.getValue()); - } - Streams.write(clone, out); - } - }.nullSafe(); - } -} diff --git a/gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java b/gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java deleted file mode 100644 index 9f07617969e1..000000000000 --- a/gson/src/test/java/com/baeldung/gson/conversion/JsonObjectConversionsUnitTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.gson.conversion; - -import com.google.gson.*; -import org.junit.Assert; -import org.junit.jupiter.api.Test; - -public class JsonObjectConversionsUnitTest { - - @Test - void whenUsingJsonParser_thenConvertToJsonObject() throws Exception { - // Example 1: Using JsonParser - String json = "{ \"name\": \"Baeldung\", \"java\": true }"; - - JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject(); - - Assert.assertTrue(jsonObject.isJsonObject()); - Assert.assertTrue(jsonObject.get("name").getAsString().equals("Baeldung")); - Assert.assertTrue(jsonObject.get("java").getAsBoolean() == true); - } - - @Test - void whenUsingGsonInstanceFromJson_thenConvertToJsonObject() throws Exception { - // Example 2: Using fromJson - String json = "{ \"name\": \"Baeldung\", \"java\": true }"; - - JsonObject convertedObject = new Gson().fromJson(json, JsonObject.class); - - Assert.assertTrue(convertedObject.isJsonObject()); - Assert.assertTrue(convertedObject.get("name").getAsString().equals("Baeldung")); - Assert.assertTrue(convertedObject.get("java").getAsBoolean() == true); - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/Foo.java b/gson/src/test/java/com/baeldung/gson/deserialization/Foo.java deleted file mode 100644 index e5567860207d..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/Foo.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.baeldung.gson.deserialization; - -public class Foo { - public int intValue; - public String stringValue; - - public Foo(final int intValue, final String stringValue) { - this.intValue = intValue; - this.stringValue = stringValue; - } - - public Foo(final String stringValue) { - this.stringValue = stringValue; - } - - public Foo() { - super(); - } - - // API - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = (prime * result) + intValue; - result = (prime * result) + ((stringValue == null) ? 0 : stringValue.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Foo other = (Foo) obj; - if (intValue != other.intValue) { - return false; - } - if (stringValue == null) { - if (other.stringValue != null) { - return false; - } - } else if (!stringValue.equals(other.stringValue)) { - return false; - } - return true; - } - - @Override - public String toString() { - return "TargetClass{" + "intValue= " + intValue + ", stringValue= " + stringValue + '}'; - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java b/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java deleted file mode 100644 index 1ccb3f7de990..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializer.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.gson.deserialization; - -import java.lang.reflect.Type; - -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; - -public class FooDeserializer implements JsonDeserializer { - - @Override - public Foo[] deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { - final JsonArray jArray = json.getAsJsonArray(); - final Foo[] scArray = new Foo[jArray.size()]; - int index = 0; - for (final JsonElement jElement : jArray) { - final int i = jElement.getAsJsonObject().get("intValue").getAsInt(); - final String s = jElement.getAsJsonObject().get("stringValue").getAsString(); - scArray[index++] = new Foo(i, s); - } - return scArray; - } - -} \ No newline at end of file diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java b/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java deleted file mode 100644 index 289f71820cd3..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/FooDeserializerFromJsonWithDifferentFields.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.gson.deserialization; - -import java.lang.reflect.Type; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; - -public class FooDeserializerFromJsonWithDifferentFields implements JsonDeserializer { - - @Override - public Foo deserialize(final JsonElement jElement, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { - final JsonObject jObject = jElement.getAsJsonObject(); - final int intValue = jObject.get("valueInt").getAsInt(); - final String stringValue = jObject.get("valueString").getAsString(); - return new Foo(intValue, stringValue); - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java b/gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java deleted file mode 100644 index e3ebc0987441..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/FooInstanceCreator.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.gson.deserialization; - -import java.lang.reflect.Type; - -import com.google.gson.InstanceCreator; - -public class FooInstanceCreator implements InstanceCreator { - - @Override - public Foo createInstance(Type type) { - return new Foo("sample"); - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java b/gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java deleted file mode 100644 index ddad97b4ab90..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/FooWithInner.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.gson.deserialization; - -public class FooWithInner { - public int intValue; - public String stringValue; - public InnerFoo innerFoo; - - public FooWithInner(int intValue, String stringValue, String name) { - super(); - this.intValue = intValue; - this.stringValue = stringValue; - this.innerFoo = new InnerFoo(name); - } - - public class InnerFoo { - public String name; - - public InnerFoo(String name) { - super(); - this.name = name; - } - - } -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java b/gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java deleted file mode 100644 index 9a81d5ae7a9b..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/GenericFoo.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.gson.deserialization; - -public class GenericFoo { - - public T theValue; - - public GenericFoo(final T value) { - theValue = value; - } - - // - - @Override - public final String toString() { - return "GenericTargetClass{" + "intField=" + theValue + '}'; - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java b/gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java deleted file mode 100644 index c49a1ea568fd..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/GsonAlternateUnitTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.gson.deserialization; - -import static org.junit.Assert.assertEquals; - -import com.baeldung.gson.entities.Weather; -import org.junit.Test; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -public class GsonAlternateUnitTest { - - @Test - public void givenTwoJsonFormats_whenDeserialized_thenWeatherObjectsCreated() throws Exception { - - Gson gson = new GsonBuilder().create(); - - Weather weather = gson.fromJson("{" + - "\"location\": \"London\"," + - "\"temp\": 15," + - "\"weather\": \"Cloudy\"" + - "}", Weather.class); - - assertEquals("London", weather.getLocation()); - assertEquals("Cloudy", weather.getOutlook()); - assertEquals(15, weather.getTemp()); - - weather = gson.fromJson("{" + - "\"place\": \"Lisbon\"," + - "\"temperature\": 35," + - "\"outlook\": \"Sunny\"" + - "}", Weather.class); - - assertEquals("Lisbon", weather.getLocation()); - assertEquals("Sunny", weather.getOutlook()); - assertEquals(35, weather.getTemp()); - - } -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java b/gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java deleted file mode 100644 index 73e76967b9c9..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/GsonDeserializeUnitTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.gson.deserialization; - -import java.text.ParseException; - -import com.baeldung.gson.entities.Movie; -import com.baeldung.gson.serialization.ActorGsonDeserializer; -import com.baeldung.gson.entities.ActorGson; -import org.junit.Assert; -import org.junit.Test; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -public class GsonDeserializeUnitTest { - @Test - public void whenSimpleDeserialize_thenCorrect() throws ParseException { - - final String jsonInput = "{\"imdbId\":\"tt0472043\",\"actors\":" + "[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"Tue Sep 21 11:00:00 GMT 1982\",\"filmography\":" + "[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - - final Gson gson = new GsonBuilder().setDateFormat("EEE MMM dd hh:mm:ss zzz yyyy").create(); - - final Movie outputMovie = gson.fromJson(jsonInput, Movie.class); - - final String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorGson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; - Assert.assertEquals(outputMovie.toString(), expectedOutput); - } - - @Test - public void whenCustomDeserialize_thenCorrect() throws ParseException { - - final String jsonInput = "{\"imdbId\":\"tt0472043\",\"actors\":" + "[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":" + "[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - - final Gson gson = new GsonBuilder().registerTypeAdapter(ActorGson.class, new ActorGsonDeserializer()).create(); - - final Movie outputMovie = gson.fromJson(jsonInput, Movie.class); - - final String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorGson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; - Assert.assertEquals(outputMovie.toString(), expectedOutput); - } -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java b/gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java deleted file mode 100644 index 77c934283a21..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/MapDeserializationUnitTest.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.baeldung.gson.deserialization; - -import java.lang.reflect.Type; -import java.text.ParseException; -import java.util.Date; -import java.util.Map; - -import org.apache.commons.lang3.time.DateUtils; -import com.baeldung.gson.entities.Employee; -import com.baeldung.gson.serialization.MapDeserializer; -import com.baeldung.gson.serialization.StringDateMapDeserializer; -import org.junit.Assert; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonSyntaxException; -import com.google.gson.internal.LinkedTreeMap; -import com.google.gson.reflect.TypeToken; - -public class MapDeserializationUnitTest { - - private static final Logger logger = LoggerFactory.getLogger(MapDeserializationUnitTest.class); - - @Test - public void whenUsingMapClass_thenShouldReturnMapWithDefaultClasses() { - - String jsonString = "{'employee.name':'Bob','employee.salary':10000, 'employee.active':true, " - + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}"; - - Gson gson = new Gson(); - Map map = gson.fromJson(jsonString, Map.class); - - logger.info("The converted map: {}", map); - Assert.assertEquals(4, map.size()); - Assert.assertEquals(Double.class, map.get("employee.salary").getClass()); - Assert.assertEquals(LinkedTreeMap.class, map.get("employee").getClass()); - - } - - @Test(expected = JsonSyntaxException.class) - public void whenUsingJsonStringWithDuplicateKey_thenShouldThrowJsonSyntaxException() { - - String jsonString = "{'employee.name':'Bob', 'employee.name':'Jenny','employee.salary':10000, " - + "'employee.active':true, " + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}"; - - Gson gson = new Gson(); - Map map = gson.fromJson(jsonString, Map.class); - - logger.info("The converted map: {}", map); - } - - @Test - public void whenUsingTypeToken_thenShouldReturnMapWithProperClass() { - - String jsonString = "{'Bob':{'id':10, 'name': 'Bob Willis', 'address':'UK'}," - + "'Jenny':{'id':10, 'name': 'Jenny McCarthy', 'address':'USA'}, " - + "'Steve':{'id':10, 'name': 'Steven Waugh', 'address':'Australia'}}"; - - Gson gson = new Gson(); - Type empMapType = new TypeToken>(){}.getType(); - Map nameEmployeeMap = gson.fromJson(jsonString, empMapType); - - logger.info("The converted map: {}", nameEmployeeMap); - Assert.assertEquals(3, nameEmployeeMap.size()); - Assert.assertEquals(Employee.class, nameEmployeeMap.get("Bob").getClass()); - } - - @Test - public void whenUsingCustomDeserializer_thenShouldReturnMapWithProperClass() { - - String jsonString = "{'employee.name':'Bob','employee.salary':10000, 'employee.active':true, " - + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}"; - - Type type = new TypeToken>(){}.getType(); - Gson gson = new GsonBuilder() - .registerTypeAdapter(type, new MapDeserializer()) - .create(); - Map blendedMap = gson.fromJson(jsonString, type); - - logger.info("The converted map: {}", blendedMap); - Assert.assertEquals(4, blendedMap.size()); - Assert.assertEquals(Integer.class, blendedMap.get("employee.salary").getClass()); - Assert.assertEquals(Employee.class, blendedMap.get("employee").getClass()); - - } - - @Test - public void whenUsingCustomDateDeserializer_thenShouldReturnMapWithDate() { - String jsonString = "{'Bob': '2017/06/01', 'Jennie':'2015/01/03'}"; - Type type = new TypeToken>(){}.getType(); - Gson gson = new GsonBuilder() - .registerTypeAdapter(type, new StringDateMapDeserializer()) - .create(); - Map empJoiningDateMap = gson.fromJson(jsonString, type); - - logger.info("The converted map: {}", empJoiningDateMap); - logger.info("The map class {}", empJoiningDateMap.getClass()); - Assert.assertEquals(2, empJoiningDateMap.size()); - Assert.assertEquals(Date.class, empJoiningDateMap.get("Bob").getClass()); - Date dt = null; - try { - dt = DateUtils.parseDate("2017-06-01", "yyyy-MM-dd"); - Assert.assertEquals(dt, empJoiningDateMap.get("Bob")); - } catch (ParseException e) { - logger.error("Could not parse date", e); - } - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java b/gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java deleted file mode 100644 index adc046ed8e73..000000000000 --- a/gson/src/test/java/com/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.baeldung.gson.deserialization.test; - -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Collection; - -import com.baeldung.gson.deserialization.Foo; -import com.baeldung.gson.deserialization.FooDeserializerFromJsonWithDifferentFields; -import com.baeldung.gson.deserialization.FooInstanceCreator; -import com.baeldung.gson.deserialization.FooWithInner; -import com.baeldung.gson.deserialization.GenericFoo; -import org.junit.Test; - -import com.google.common.collect.Lists; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; - -public class GsonDeserializationUnitTest { - - // tests - single element - - @Test - public final void whenDeserializingToSimpleObject_thenCorrect() { - final String json = "{\"intValue\":1,\"stringValue\":\"one\"}"; - - final Foo targetObject = new Gson().fromJson(json, Foo.class); - - assertEquals(targetObject.intValue, 1); - assertEquals(targetObject.stringValue, "one"); - } - - @Test - public final void givenJsonHasExtraValues_whenDeserializing_thenCorrect() { - final String json = "{\"intValue\":1,\"stringValue\":\"one\",\"extraString\":\"two\",\"extraFloat\":2.2}"; - final Foo targetObject = new Gson().fromJson(json, Foo.class); - - assertEquals(targetObject.intValue, 1); - assertEquals(targetObject.stringValue, "one"); - } - - @Test - public final void givenJsonHasNonMatchingFields_whenDeserializingWithCustomDeserializer_thenCorrect() { - final String json = "{\"valueInt\":7,\"valueString\":\"seven\"}"; - - final GsonBuilder gsonBldr = new GsonBuilder(); - gsonBldr.registerTypeAdapter(Foo.class, new FooDeserializerFromJsonWithDifferentFields()); - final Foo targetObject = gsonBldr.create().fromJson(json, Foo.class); - - assertEquals(targetObject.intValue, 7); - assertEquals(targetObject.stringValue, "seven"); - } - - @Test - public final void whenDeserializingToGenericObject_thenCorrect() { - final Type typeToken = new TypeToken>() { - }.getType(); - final String json = "{\"theValue\":1}"; - - final GenericFoo targetObject = new Gson().fromJson(json, typeToken); - - assertEquals(targetObject.theValue, new Integer(1)); - } - - // tests - multiple elements - - @Test - public final void givenJsonArrayOfFoos_whenDeserializingToArray_thenCorrect() { - final String json = "[{\"intValue\":1,\"stringValue\":\"one\"}," + "{\"intValue\":2,\"stringValue\":\"two\"}]"; - final Foo[] targetArray = new GsonBuilder().create().fromJson(json, Foo[].class); - - assertThat(Lists.newArrayList(targetArray), hasItem(new Foo(1, "one"))); - assertThat(Lists.newArrayList(targetArray), hasItem(new Foo(2, "two"))); - assertThat(Lists.newArrayList(targetArray), not(hasItem(new Foo(1, "two")))); - } - - @Test - public final void givenJsonArrayOfFoos_whenDeserializingCollection_thenCorrect() { - final String json = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]"; - final Type targetClassType = new TypeToken>() { - }.getType(); - - final Collection targetCollection = new Gson().fromJson(json, targetClassType); - assertThat(targetCollection, instanceOf(ArrayList.class)); - } - - // - - @Test - public void whenDeserializingJsonIntoElements_thenCorrect() { - final String jsonSourceObject = "{\"valueInt\":7,\"valueString\":\"seven\"}"; - final JsonParser jParser = new JsonParser(); - final JsonElement jElement = jParser.parse(jsonSourceObject); - final JsonObject jObject = jElement.getAsJsonObject(); - final int intValue = jObject.get("valueInt").getAsInt(); - final String stringValue = jObject.get("valueString").getAsString(); - - final Foo targetObject = new Foo(intValue, stringValue); - - assertEquals(targetObject.intValue, 7); - assertEquals(targetObject.stringValue, "seven"); - } - - // new examples - - @Test - public void whenDeserializingToNestedObjects_thenCorrect() { - final String json = "{\"intValue\":1,\"stringValue\":\"one\",\"innerFoo\":{\"name\":\"inner\"}}"; - - final FooWithInner targetObject = new Gson().fromJson(json, FooWithInner.class); - - assertEquals(targetObject.intValue, 1); - assertEquals(targetObject.stringValue, "one"); - assertEquals(targetObject.innerFoo.name, "inner"); - } - - @Test - public void whenDeserializingUsingInstanceCreator_thenCorrect() { - final String json = "{\"intValue\":1}"; - - final GsonBuilder gsonBldr = new GsonBuilder(); - gsonBldr.registerTypeAdapter(Foo.class, new FooInstanceCreator()); - final Foo targetObject = gsonBldr.create().fromJson(json, Foo.class); - - assertEquals(targetObject.intValue, 1); - assertEquals(targetObject.stringValue, "sample"); - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java b/gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java deleted file mode 100644 index 84989a7411f3..000000000000 --- a/gson/src/test/java/com/baeldung/gson/jsoncompare/JsonCompareUnitTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.baeldung.gson.jsoncompare; - -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import org.junit.Test; -import static org.junit.Assert.*; - -public class JsonCompareUnitTest { - @Test - public void givenJsonStrings_whenCompared_thenNotEqual() { - String string1 = "{\"fullName\": \"Emily Jenkins\", \"age\": 27 }"; - String string2 = "{\"fullName\": \"Emily Jenkins\", \"age\": 27}"; - - assertNotEquals(string1, string2); - } - - @Test - public void givenIdenticalSimpleObjects_whenCompared_thenEqual() { - JsonParser parser = new JsonParser(); - String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27 }}"; - String string2 = "{\"customer\": {\"id\": \"44521\", \"fullName\": \"Emily Jenkins\",\"age\": 27}}"; - - assertTrue(parser.parse(string1) - .isJsonObject()); - assertEquals(parser.parse(string1), parser.parse(string2)); - } - - @Test - public void givenSameObjectsInDifferentOrder_whenCompared_thenEqual() { - JsonParser parser = new JsonParser(); - String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27 }}"; - String string2 = "{\"customer\": {\"id\": \"44521\",\"age\": 27, \"fullName\": \"Emily Jenkins\" }}"; - - JsonElement json1 = parser.parse(string1); - JsonElement json2 = parser.parse(string2); - - assertEquals(json1, json2); - } - - @Test - public void givenIdenticalArrays_whenCompared_thenEqual() { - JsonParser parser = new JsonParser(); - String string1 = "[10, 20, 30]"; - String string2 = "[10, 20, 30]"; - - assertTrue(parser.parse(string1) - .isJsonArray()); - assertEquals(parser.parse(string1), parser.parse(string2)); - } - - @Test - public void givenArraysInDifferentOrder_whenCompared_thenNotEqual() { - JsonParser parser = new JsonParser(); - String string1 = "[20, 10, 30]"; - String string2 = "[10, 20, 30]"; - - assertNotEquals(parser.parse(string1), parser.parse(string2)); - } - - @Test - public void givenIdenticalNestedObjects_whenCompared_thenEqual() { - JsonParser parser = new JsonParser(); - String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"fav_product\": \"Coke\", \"last_buy\": \"2012-04-23\"}}}"; - String string2 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"fav_product\": \"Coke\"}}}"; - - JsonElement json1 = parser.parse(string1); - JsonElement json2 = parser.parse(string2); - - assertEquals(json1, json2); - } - - @Test - public void givenIdenticalNestedObjectsWithArray_whenCompared_thenEqual() { - JsonParser parser = new JsonParser(); - String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"banana\", \"eggs\"]}}}"; - String string2 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"banana\", \"eggs\"]}}}"; - - JsonElement json1 = parser.parse(string1); - JsonElement json2 = parser.parse(string2); - - assertEquals(json1, json2); - } - - @Test - public void givenNestedObjectsDifferentArrayOrder_whenCompared_thenNotEqual() { - JsonParser parser = new JsonParser(); - String string1 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"banana\", \"eggs\"]}}}"; - String string2 = "{\"customer\": {\"id\": \"44521\",\"fullName\": \"Emily Jenkins\", \"age\": 27, \"consumption_info\" : {\"last_buy\": \"2012-04-23\", \"prouducts\": [\"eggs\", \"banana\"]}}}"; - - JsonElement json1 = parser.parse(string1); - JsonElement json2 = parser.parse(string2); - - assertNotEquals(json1, json2); - } -} diff --git a/gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java b/gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java deleted file mode 100644 index e1241fa92a37..000000000000 --- a/gson/src/test/java/com/baeldung/gson/primitives/PrimitiveValuesUnitTest.java +++ /dev/null @@ -1,248 +0,0 @@ -package com.baeldung.gson.primitives; - -import com.baeldung.gson.primitives.models.*; -import com.google.gson.*; -import org.junit.Test; - -import java.lang.reflect.Type; - -import static junit.framework.TestCase.*; - -public class PrimitiveValuesUnitTest { - @Test public void whenSerializingToJSON_thenShouldCreateJSON() { - PrimitiveBundle primitiveBundle = new PrimitiveBundle(); - - // @formatter:off - primitiveBundle.byteValue = (byte) 0x00001111; - primitiveBundle.shortValue = (short) 3; - primitiveBundle.intValue = 3; - primitiveBundle.longValue = 3; - primitiveBundle.floatValue = 3.5f; - primitiveBundle.doubleValue = 3.5; - primitiveBundle.booleanValue = true; - primitiveBundle.charValue = 'a'; - // @formatter:on - - Gson gson = new Gson(); - - String expected = "{\"byteValue\":17,\"shortValue\":3,\"intValue\":3," - + "\"longValue\":3,\"floatValue\":3.5" + ",\"doubleValue\":3.5" - + ",\"booleanValue\":true,\"charValue\":\"a\"}"; - - assertEquals(expected, gson.toJson(primitiveBundle)); - } - - @Test(expected = IllegalArgumentException.class) public void - whenSerializingInfinity_thenShouldRaiseAnException() { - InfinityValuesExample model = new InfinityValuesExample(); - model.negativeInfinity = Float.NEGATIVE_INFINITY; - model.positiveInfinity = Float.POSITIVE_INFINITY; - - Gson gson = new Gson(); - - gson.toJson(model); - } - - @Test(expected = IllegalArgumentException.class) public void - whenSerializingNaN_thenShouldRaiseAnException() { - FloatExample model = new FloatExample(); - model.value = Float.NaN; - - Gson gson = new Gson(); - gson.toJson(model); - } - - @Test public void whenDeserializingFromJSON_thenShouldParseTheValueInTheString() { - String json = "{\"byteValue\": 17, \"shortValue\": 3, \"intValue\": 3, " - + "\"longValue\": 3, \"floatValue\": 3.5" + ", \"doubleValue\": 3.5" - + ", \"booleanValue\": true, \"charValue\": \"a\"}"; - - Gson gson = new Gson(); - PrimitiveBundle model = gson.fromJson(json, PrimitiveBundle.class); - - // @formatter:off - assertEquals(17, model.byteValue); - assertEquals(3, model.shortValue); - assertEquals(3, model.intValue); - assertEquals(3, model.longValue); - assertEquals(3.5, model.floatValue, 0.0001); - assertEquals(3.5, model.doubleValue, 0.0001); - assertTrue( model.booleanValue); - assertEquals('a', model.charValue); - // @formatter:on - } - - @Test public void whenDeserializingHighPrecissionNumberIntoFloat_thenShouldPerformRounding() { - String json = "{\"value\": 12.123425589123456}"; - Gson gson = new Gson(); - FloatExample model = gson.fromJson(json, FloatExample.class); - assertEquals(12.123426f, model.value, 0.000001); - } - - @Test public void whenDeserializingHighPrecissiongNumberIntoDouble_thenShouldPerformRounding() { - String json = "{\"value\": 12.123425589123556}"; - Gson gson = new Gson(); - DoubleExample model = gson.fromJson(json, DoubleExample.class); - assertEquals(12.123425589124f, model.value, 0.000001); - } - - - @Test public void whenDeserializingValueThatOverflows_thenShouldOverflowSilently() { - Gson gson = new Gson(); - String json = "{\"value\": \"300\"}"; - ByteExample model = gson.fromJson(json, ByteExample.class); - - assertEquals(44, model.value); - } - - @Test public void whenDeserializingRealIntoByte_thenShouldRaiseAnException() { - Gson gson = new Gson(); - String json = "{\"value\": 2.3}"; - try { - gson.fromJson(json, ByteExample.class); - } catch (Exception ex) { - assertTrue(ex instanceof JsonSyntaxException); - assertTrue(ex.getCause() instanceof NumberFormatException); - return; - } - - fail(); - } - - @Test public void whenDeserializingRealIntoLong_thenShouldRaiseAnException() { - Gson gson = new Gson(); - String json = "{\"value\": 2.3}"; - try { - gson.fromJson(json, LongExample.class); - } catch (Exception ex) { - assertTrue(ex instanceof JsonSyntaxException); - assertTrue(ex.getCause() instanceof NumberFormatException); - return; - } - - fail(); - } - - @Test public void whenDeserializingRealWhoseDecimalPartIs0_thenShouldParseItCorrectly() { - Gson gson = new Gson(); - String json = "{\"value\": 2.0}"; - LongExample model = gson.fromJson(json, LongExample.class); - assertEquals(2, model.value); - } - - @Test public void whenDeserializingUnicodeChar_thenShouldParseItCorrectly() { - Gson gson = new Gson(); - String json = "{\"value\": \"\\u00AE\"}"; - CharExample model = gson.fromJson(json, CharExample.class); - - assertEquals('\u00AE', model.value); - } - - @Test public void whenDeserializingNullValues_thenShouldIgnoreThoseFields() { - Gson gson = new Gson(); - // @formatter:off - String json = "{\"byteValue\": null, \"shortValue\": null, " - + "\"intValue\": null, " + "\"longValue\": null, \"floatValue\": null" - + ", \"doubleValue\": null}"; - // @formatter:on - PrimitiveBundleInitialized model = gson.fromJson(json, - PrimitiveBundleInitialized.class); - - assertEquals(1, model.byteValue); - assertEquals(1, model.shortValue); - assertEquals(1, model.intValue); - assertEquals(1, model.longValue); - assertEquals(1, model.floatValue, 0.0001); - assertEquals(1, model.doubleValue, 0.0001); - } - - @Test(expected = JsonSyntaxException.class) public void - whenDeserializingTheEmptyString_thenShouldRaiseAnException() { - Gson gson = new Gson(); - // @formatter:off - String json = "{\"byteValue\": \"\", \"shortValue\": \"\", " - + "\"intValue\": \"\", " + "\"longValue\": \"\", \"floatValue\": \"\"" - + ", \"doubleValue\": \"\"" + ", \"booleanValue\": \"\"}"; - // @formatter:on - gson.fromJson(json, PrimitiveBundleInitialized.class); - } - - @Test public void whenDeserializingTheEmptyStringIntoChar_thenShouldHaveTheEmtpyChar() { - Gson gson = new Gson(); - // @formatter:off - String json = "{\"charValue\": \"\"}"; - // @formatter:on - CharExample model = gson.fromJson(json, CharExample.class); - - assertEquals(Character.MIN_VALUE, model.value); - } - - @Test public void whenDeserializingValidValueAppearingInAString_thenShouldParseTheValue() { - Gson gson = new Gson(); - // @formatter:off - String json = "{\"byteValue\": \"15\", \"shortValue\": \"15\", " - + "\"intValue\": \"15\", " + "\"longValue\": \"15\", \"floatValue\": \"15.0\"" - + ", \"doubleValue\": \"15.0\"}"; - // @formatter:on - PrimitiveBundleInitialized model = gson.fromJson(json, - PrimitiveBundleInitialized.class); - - assertEquals(15, model.byteValue); - assertEquals(15, model.shortValue); - assertEquals(15, model.intValue); - assertEquals(15, model.longValue); - assertEquals(15, model.floatValue, 0.0001); - assertEquals(15, model.doubleValue, 0.0001); - } - - @Test public void whenDeserializingABooleanFrom0Or1Integer_thenShouldRaiseAnException() { - String json = "{\"value\": 1}"; - Gson gson = new Gson(); - - try { - gson.fromJson(json, BooleanExample.class); - } catch (Exception ex) { - assertTrue(ex instanceof JsonSyntaxException); - assertTrue(ex.getCause() instanceof IllegalStateException); - return; - } - - fail(); - } - - @Test public void whenDeserializingWithCustomDeserializerABooleanFrom0Or1Integer_thenShouldWork() { - String json = "{\"value\": 1}"; - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapter(BooleanExample.class, - new BooleanAs2ValueIntegerDeserializer()); - - Gson gson = builder.create(); - - BooleanExample model = gson.fromJson(json, BooleanExample.class); - - assertTrue(model.value); - } - - // @formatter:off - static class BooleanAs2ValueIntegerDeserializer implements JsonDeserializer { - @Override public BooleanExample deserialize( - JsonElement jsonElement, - Type type, - JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { - - BooleanExample model = new BooleanExample(); - int value = jsonElement.getAsJsonObject().getAsJsonPrimitive("value").getAsInt(); - if (value == 0) { - model.value = false; - } else if (value == 1) { - model.value = true; - } else { - throw new JsonParseException("Unexpected value. Trying to deserialize " - + "a boolean from an integer different than 0 and 1."); - } - - return model; - } - } - // @formatter:on -} diff --git a/gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java b/gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java deleted file mode 100644 index b82f90f4769b..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serialization/DifferentNameSerializer.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.gson.serialization; - -import java.lang.reflect.Type; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class DifferentNameSerializer implements JsonSerializer { - - @Override - public JsonElement serialize(final SourceClass src, final Type typeOfSrc, final JsonSerializationContext context) { - final String otherIntValueName = "otherIntValue"; - final String otherStringValueName = "otherStringValue"; - - final JsonObject jObject = new JsonObject(); - jObject.addProperty(otherIntValueName, src.getIntValue()); - jObject.addProperty(otherStringValueName, src.getStringValue()); - - return jObject; - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java b/gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java deleted file mode 100644 index d5051060c404..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serialization/GsonSerializeUnitTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.baeldung.gson.serialization; - -import com.baeldung.gson.entities.Movie; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParser; -import com.baeldung.gson.entities.ActorGson; -import com.baeldung.gson.entities.MovieWithNullValue; -import org.junit.Assert; -import org.junit.Test; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Arrays; - -public class GsonSerializeUnitTest { - - @Test - public void whenSimpleSerialize_thenCorrect() throws ParseException { - - SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - - ActorGson rudyYoungblood = new ActorGson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); - Movie movie = new Movie("tt0472043", "Mel Gibson", Arrays.asList(rudyYoungblood)); - - String expectedOutput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"Sep 21, 1982 12:00:00 AM\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - Assert.assertEquals(new Gson().toJson(movie), expectedOutput); - } - - @Test - public void whenCustomSerialize_thenCorrect() throws ParseException { - Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().serializeNulls().disableHtmlEscaping().registerTypeAdapter(ActorGson.class, new ActorGsonSerializer()).create(); - - SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - - ActorGson rudyYoungblood = new ActorGson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); - MovieWithNullValue movieWithNullValue = new MovieWithNullValue(null, "Mel Gibson", Arrays.asList(rudyYoungblood)); - - String expectedOutput = new GsonBuilder() - .setPrettyPrinting() - .serializeNulls() - .disableHtmlEscaping() - .create() - .toJson(new JsonParser() - .parse("{\"imdbId\":null,\"actors\":[{\"IMDB Code\":\"nm2199632\",\"Date Of Birth\":\"21-09-1982\",\"N° Film: \":3,\"filmography\":\"Apocalypto-Beatdown-Wind Walkers\"}]}")); - Assert.assertEquals(gson.toJson(movieWithNullValue), expectedOutput); - } -} diff --git a/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java b/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java deleted file mode 100644 index 554d63b29b86..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsNotMatchingCriteriaSerializer.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.gson.serialization; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; - -public class IgnoringFieldsNotMatchingCriteriaSerializer implements JsonSerializer { - @Override - public JsonElement serialize(SourceClass src, Type typeOfSrc, JsonSerializationContext context) { - JsonObject jObject = new JsonObject(); - - // Criteria: intValue >= 0 - if (src.getIntValue() >= 0) { - String intValue = "intValue"; - jObject.addProperty(intValue, src.getIntValue()); - } - - String stringValue = "stringValue"; - jObject.addProperty(stringValue, src.getStringValue()); - - return jObject; - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java b/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java deleted file mode 100644 index 7f251894a091..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serialization/IgnoringFieldsSerializer.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.gson.serialization; - -import java.lang.reflect.Type; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -public class IgnoringFieldsSerializer implements JsonSerializer { - @Override - public JsonElement serialize(final SourceClass src, final Type typeOfSrc, final JsonSerializationContext context) { - final String intValue = "intValue"; - final JsonObject jObject = new JsonObject(); - jObject.addProperty(intValue, src.getIntValue()); - - return jObject; - } -} diff --git a/gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java b/gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java deleted file mode 100644 index 181f1134b542..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serialization/SourceClass.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.gson.serialization; - -public class SourceClass { - private int intValue; - private String stringValue; - - public SourceClass(final int intValue, final String stringValue) { - this.intValue = intValue; - this.stringValue = stringValue; - } - - // API - - public int getIntValue() { - return intValue; - } - - public String getStringValue() { - return stringValue; - } - - // - - @Override - public String toString() { - return "SourceClass{" + "intValue=" + intValue + ", stringValue='" + stringValue + '\'' + '}'; - } - - @Override - public boolean equals(final Object o) { - if (this == o) - return true; - if (!(o instanceof SourceClass)) - return false; - - final SourceClass that = (SourceClass) o; - - if (intValue != that.intValue) - return false; - if (!stringValue.equals(that.stringValue)) - return false; - - return true; - } - - @Override - public int hashCode() { - int result = intValue; - result = 31 * result + stringValue.hashCode(); - return result; - } -} diff --git a/gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java b/gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java deleted file mode 100644 index 4780b8a6bfb8..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serialization/test/GsonSerializationUnitTest.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.baeldung.gson.serialization.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.lang.reflect.Type; -import java.util.Collection; -import java.util.Date; - -import com.baeldung.gson.serialization.DifferentNameSerializer; -import com.baeldung.gson.serialization.IgnoringFieldsNotMatchingCriteriaSerializer; -import com.baeldung.gson.serialization.IgnoringFieldsSerializer; -import com.baeldung.gson.serialization.SourceClass; -import org.joda.time.DateTime; -import org.junit.Test; - -import com.google.common.collect.Lists; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; - -public class GsonSerializationUnitTest { - - @Test - public void givenArrayOfObjects_whenSerializing_thenCorrect() { - final SourceClass[] sourceArray = { new SourceClass(1, "one"), new SourceClass(2, "two") }; - final String jsonString = new Gson().toJson(sourceArray); - - // test - final String expectedResult = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]"; - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenCollection_whenSerializing_thenCorrect() { - final Collection sourceCollection = Lists.newArrayList(new SourceClass(1, "one"), new SourceClass(2, "two")); - final String jsonCollection = new Gson().toJson(sourceCollection); - - final String expectedResult = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]"; - assertEquals(expectedResult, jsonCollection); - } - - @Test - public void givenUsingCustomSerializer_whenChangingNameOfFieldOnSerializing_thenCorrect() { - final SourceClass sourceObject = new SourceClass(7, "seven"); - final GsonBuilder gsonBuildr = new GsonBuilder(); - gsonBuildr.registerTypeAdapter(SourceClass.class, new DifferentNameSerializer()); - final String jsonString = gsonBuildr.create().toJson(sourceObject); - - final String expectedResult = "{\"otherIntValue\":7,\"otherStringValue\":\"seven\"}"; - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenIgnoringAField_whenSerializingWithCustomSerializer_thenFieldIgnored() { - final SourceClass sourceObject = new SourceClass(7, "seven"); - final GsonBuilder gsonBuildr = new GsonBuilder(); - gsonBuildr.registerTypeAdapter(SourceClass.class, new IgnoringFieldsSerializer()); - final String jsonString = gsonBuildr.create().toJson(sourceObject); - - final String expectedResult = "{\"intValue\":7}"; - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenUsingCustomDeserializer_whenFieldNotMatchesCriteria_thenIgnored() { - final SourceClass sourceObject = new SourceClass(-1, "minus 1"); - final GsonBuilder gsonBuildr = new GsonBuilder(); - gsonBuildr.registerTypeAdapter(SourceClass.class, new IgnoringFieldsNotMatchingCriteriaSerializer()); - final Gson gson = gsonBuildr.create(); - final Type sourceObjectType = new TypeToken() { - }.getType(); - final String jsonString = gson.toJson(sourceObject, sourceObjectType); - - final String expectedResult = "{\"stringValue\":\"minus 1\"}"; - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenDate_whenSerializing_thenCorrect() { - Date sourceDate = new DateTime().withYear(2000).withMonthOfYear(1).withDayOfMonth(1).withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).toDate(); - - final Gson gson = new Gson(); - Type sourceDateType = new TypeToken() { - }.getType(); - String jsonDate = gson.toJson(sourceDate, sourceDateType); - - System.out.println("jsonDate:\n" + jsonDate); - String expectedResult = "\"Jan 1, 2000 12:00:00 AM\""; - assertEquals(expectedResult, jsonDate); - } - -} \ No newline at end of file diff --git a/gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java b/gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java deleted file mode 100644 index 8e5843552001..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serialization/test/JsonFileUnitTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.baeldung.gson.serialization.test; - -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.nio.file.Files; -import java.nio.file.Paths; - -import com.baeldung.gson.entities.User; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameter; -import org.junit.runners.Parameterized.Parameters; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -@RunWith(Parameterized.class) -public class JsonFileUnitTest { - - @Parameter - public Object object; - - @Parameters - public static Object[] data() { - return new Object[] { 123.45, new User(1, "Tom", "American") }; - } - - @Test - public void givenProperData_whenStoredInFile_shouldSaveJsonSuccessfully() { - String filePath = "target/output.json"; - try (Writer writer = new FileWriter(filePath)) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - gson.toJson(object, writer); - Assert.assertTrue(Files.exists(Paths.get(filePath))); - } catch (IOException e) { - e.printStackTrace(); - } - } - -} diff --git a/gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java b/gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java deleted file mode 100644 index d677f0b27105..000000000000 --- a/gson/src/test/java/com/baeldung/gson/serializationwithexclusions/SerializationWithExclusionsUnitTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.baeldung.gson.serializationwithexclusions; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -import com.google.gson.ExclusionStrategy; -import com.google.gson.FieldAttributes; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -class SerializationWithExclusionsUnitTest { - - final String expectedResult = "{\"id\":1,\"name\":\"foo\",\"subclass\":{\"id\":42,\"description\":\"the answer\"}}"; - - @Test - public void givenClassWithTransientFields_whenSerializing_thenCorrectWithoutTransientFields() { - MyClassWithTransientFields source = new MyClassWithTransientFields(1L, "foo", "bar", new MySubClassWithTransientFields(42L, "the answer", "Verbose field which we don't want to be serialized")); - String jsonString = new Gson().toJson(source); - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenClassAnnotated_whenSerializing_thenCorrectWithoutNotAnnotatedFields() { - MyClassWithAnnotatedFields source = new MyClassWithAnnotatedFields(1L, "foo", "bar", new MySubClassWithAnnotatedFields(42L, "the answer", "Verbose field which we don't want to be serialized")); - Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation() - .create(); - String jsonString = gson.toJson(source); - - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenExclusionStrategyByClassesAndFields_whenSerializing_thenFollowStrategy() { - MyClass source = new MyClass(1L, "foo", "bar", new MySubClass(42L, "the answer", "Verbose field which we don't want to be serialized")); - ExclusionStrategy strategy = new ExclusionStrategy() { - @Override - public boolean shouldSkipField(FieldAttributes field) { - if (field.getDeclaringClass() == MyClass.class && field.getName() - .equals("other")) - return true; - if (field.getDeclaringClass() == MySubClass.class && field.getName() - .equals("otherVerboseInfo")) - return true; - return false; - } - - @Override - public boolean shouldSkipClass(Class clazz) { - return false; - } - }; - - Gson gson = new GsonBuilder().addSerializationExclusionStrategy(strategy) - .create(); - String jsonString = gson.toJson(source); - - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenExclusionStrategyByStartsWith_whenSerializing_thenFollowStrategy() { - MyClass source = new MyClass(1L, "foo", "bar", new MySubClass(42L, "the answer", "Verbose field which we don't want to be serialized")); - ExclusionStrategy strategy = new ExclusionStrategy() { - @Override - public boolean shouldSkipClass(Class clazz) { - return false; - } - - @Override - public boolean shouldSkipField(FieldAttributes field) { - return field.getName().startsWith("other"); - } - }; - Gson gson = new GsonBuilder().setExclusionStrategies(strategy) - .create(); - String jsonString = gson.toJson(source); - - assertEquals(expectedResult, jsonString); - } - - @Test - public void givenExclusionStrategyByCustomAnnotation_whenSerializing_thenFollowStrategy() { - MyClassWithCustomAnnotatedFields source = new MyClassWithCustomAnnotatedFields(1L, "foo", "bar", new MySubClassWithCustomAnnotatedFields(42L, "the answer", "Verbose field which we don't want to be serialized")); - ExclusionStrategy strategy = new ExclusionStrategy() { - @Override - public boolean shouldSkipClass(Class clazz) { - return false; - } - - @Override - public boolean shouldSkipField(FieldAttributes field) { - return field.getAnnotation(Exclude.class) != null; - } - - }; - - Gson gson = new GsonBuilder().setExclusionStrategies(strategy) - .create(); - String jsonString = gson.toJson(source); - assertEquals(expectedResult, jsonString); - } - -} \ No newline at end of file diff --git a/gson/src/test/resources/.gitignore b/gson/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c802..000000000000 --- a/gson/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/gson/src/test/resources/logback-test.xml b/gson/src/test/resources/logback-test.xml deleted file mode 100644 index 7bd5154680da..000000000000 --- a/gson/src/test/resources/logback-test.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/json-2/README.md b/json-2/README.md deleted file mode 100644 index b3e7fb0b9479..000000000000 --- a/json-2/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## JSON - -This module contains articles about JSON. - -### Relevant Articles: - -- [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter) -- [Introduction to Moshi Json](https://www.baeldung.com/java-json-moshi) -- [Hypermedia Serialization With JSON-LD](https://www.baeldung.com/json-linked-data) -- [Generate a Java Class From JSON](https://www.baeldung.com/java-generate-class-from-json) -- [A Guide to FastJson](https://www.baeldung.com/fastjson) -- [Check Whether a String is Valid JSON in Java](https://www.baeldung.com/java-validate-json-string) -- More Articles: [[<-- prev]](/json) diff --git a/json-2/pom.xml b/json-2/pom.xml deleted file mode 100644 index 6fbdebc95312..000000000000 --- a/json-2/pom.xml +++ /dev/null @@ -1,163 +0,0 @@ - - - 4.0.0 - com.baeldung - json-2 - 0.0.1-SNAPSHOT - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - - - - org.json - json - ${json.version} - - - com.alibaba - fastjson - ${fastjson.version} - - - org.jsonschema2pojo - jsonschema2pojo-core - ${jsonschema2pojo-core.version} - - - com.jsoniter - jsoniter - ${jsoniter.version} - - - com.squareup.moshi - moshi - ${moshi.version} - - - com.squareup.moshi - moshi-adapters - ${moshi.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.io-informatics.oss - jackson-jsonld - ${jackson-jsonld.version} - - - jackson-databind - com.fasterxml.jackson.core - - - jackson-annotations - com.fasterxml.jackson.core - - - jackson-core - com.fasterxml.jackson.core - - - jsonld-java - com.github.jsonld-java - - - - - de.escalon.hypermedia - hydra-jsonld - ${hydra-jsonld.version} - - - jackson-databind - com.fasterxml.jackson.core - - - - - com.github.jsonld-java - jsonld-java - ${jsonld-java.version} - - - jackson-core - com.fasterxml.jackson.core - - - jackson-databind - com.fasterxml.jackson.core - - - - - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - - org.apache.maven.plugins - - - maven-pmd-plugin - - - [3.13.0,) - - - check - - - - - - - - - - - - - - - - 0.9.23 - 1.9.2 - 1.2.21 - 20211205 - 1.1.1 - 0.1.1 - 0.4.2 - 0.13.0 - - - \ No newline at end of file diff --git a/json-2/src/main/java/com/baeldung/jsoniter/model/Name.java b/json-2/src/main/java/com/baeldung/jsoniter/model/Name.java deleted file mode 100644 index ed5e221235fe..000000000000 --- a/json-2/src/main/java/com/baeldung/jsoniter/model/Name.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.jsoniter.model; - -public class Name { - private String firstName; - private String surname; - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getSurname() { - return surname; - } - - public void setSurname(String surname) { - this.surname = surname; - } -} diff --git a/json-2/src/main/java/com/baeldung/jsoniter/model/Student.java b/json-2/src/main/java/com/baeldung/jsoniter/model/Student.java deleted file mode 100644 index 07c73dd18e2a..000000000000 --- a/json-2/src/main/java/com/baeldung/jsoniter/model/Student.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.jsoniter.model; - -import com.jsoniter.annotation.JsonProperty; -import com.jsoniter.fuzzy.MaybeStringIntDecoder; - -public class Student { - @JsonProperty(decoder = MaybeStringIntDecoder.class) - private int id; - private Name name; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public Name getName() { - return name; - } - - public void setName(Name name) { - this.name = name; - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java b/json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java deleted file mode 100644 index 85451731e9fe..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/Customer.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Objects; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class Customer { - - private long id; - private String firstName; - private String lastName; - private String street; - private String postalCode; - private String city; - private String state; - private String phoneNumber; - private String email; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - 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 String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getPostalCode() { - return postalCode; - } - - public void setPostalCode(String postalCode) { - this.postalCode = postalCode; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @Override - public int hashCode() { - return Objects.hash(city, email, firstName, id, lastName, phoneNumber, postalCode, state, street); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof Customer)) { - return false; - } - Customer other = (Customer) obj; - return Objects.equals(city, other.city) && Objects.equals(email, other.email) && Objects.equals(firstName, other.firstName) && id == other.id && Objects.equals(lastName, other.lastName) && Objects.equals(phoneNumber, other.phoneNumber) - && Objects.equals(postalCode, other.postalCode) && Objects.equals(state, other.state) && Objects.equals(street, other.street); - } - - @Override - public String toString() { - return "Customer [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", street=" + street + ", postalCode=" + postalCode + ", city=" + city + ", state=" + state + ", phoneNumber=" + phoneNumber + ", email=" + email + "]"; - } - - public static Customer[] fromMockFile() throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - InputStream jsonFile = new FileInputStream("src/test/resources/json_optimization_mock_data.json"); - Customer[] feedback = objectMapper.readValue(jsonFile, Customer[].class); - return feedback; - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java b/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java deleted file mode 100644 index 16b66311ad70..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerDeserializer.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class CustomerDeserializer extends StdDeserializer { - private static final long serialVersionUID = 1L; - - public CustomerDeserializer() { - this(null); - } - - public CustomerDeserializer(Class t) { - super(t); - } - - @Override - public Customer deserialize(JsonParser parser, DeserializationContext deserializer) throws IOException { - Customer feedback = new Customer(); - ObjectCodec codec = parser.getCodec(); - JsonNode node = codec.readTree(parser); - - feedback.setId(node.get(0) - .asLong()); - feedback.setFirstName(node.get(1) - .asText()); - feedback.setLastName(node.get(2) - .asText()); - feedback.setStreet(node.get(3) - .asText()); - feedback.setPostalCode(node.get(4) - .asText()); - feedback.setCity(node.get(5) - .asText()); - feedback.setState(node.get(6) - .asText()); - JsonNode phoneNumber = node.get(7); - feedback.setPhoneNumber(phoneNumber.isNull() ? null : phoneNumber.asText()); - JsonNode email = node.get(8); - feedback.setEmail(email.isNull() ? null : email.asText()); - - return feedback; - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java b/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java deleted file mode 100644 index 0f631ee85b88..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSerializer.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomerSerializer extends StdSerializer { - private static final long serialVersionUID = 1L; - - public CustomerSerializer() { - this(null); - } - - public CustomerSerializer(Class t) { - super(t); - } - - @Override - public void serialize(Customer customer, JsonGenerator jsonGenerator, SerializerProvider serializer) throws IOException { - jsonGenerator.writeStartArray(); - jsonGenerator.writeNumber(customer.getId()); - jsonGenerator.writeString(customer.getFirstName()); - jsonGenerator.writeString(customer.getLastName()); - jsonGenerator.writeString(customer.getStreet()); - jsonGenerator.writeString(customer.getPostalCode()); - jsonGenerator.writeString(customer.getCity()); - jsonGenerator.writeString(customer.getState()); - jsonGenerator.writeString(customer.getPhoneNumber()); - jsonGenerator.writeString(customer.getEmail()); - jsonGenerator.writeEndArray(); - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java b/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java deleted file mode 100644 index b94fbb10333b..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerShortNames.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.util.Objects; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class CustomerShortNames { - - @JsonProperty("i") - private long id; - - @JsonProperty("f") - private String firstName; - - @JsonProperty("l") - private String lastName; - - @JsonProperty("s") - private String street; - - @JsonProperty("p") - private String postalCode; - - @JsonProperty("c") - private String city; - - @JsonProperty("a") - private String state; - - @JsonProperty("o") - private String phoneNumber; - - @JsonProperty("e") - private String email; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - 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 String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getPostalCode() { - return postalCode; - } - - public void setPostalCode(String postalCode) { - this.postalCode = postalCode; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @Override - public int hashCode() { - return Objects.hash(city, email, firstName, id, lastName, phoneNumber, postalCode, state, street); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof CustomerShortNames)) { - return false; - } - CustomerShortNames other = (CustomerShortNames) obj; - return Objects.equals(city, other.city) && Objects.equals(email, other.email) && Objects.equals(firstName, other.firstName) && id == other.id && Objects.equals(lastName, other.lastName) && Objects.equals(phoneNumber, other.phoneNumber) - && Objects.equals(postalCode, other.postalCode) && Objects.equals(state, other.state) && Objects.equals(street, other.street); - } - - @Override - public String toString() { - return "CustomerWithShorterAttributes [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", street=" + street + ", postalCode=" + postalCode + ", city=" + city + ", state=" + state + ", phoneNumber=" + phoneNumber + ", email=" + email - + "]"; - } - - public static CustomerShortNames[] fromCustomers(Customer[] customers) { - CustomerShortNames[] feedback = new CustomerShortNames[customers.length]; - - for (int i = 0; i < customers.length; i++) { - Customer aCustomer = customers[i]; - CustomerShortNames newOne = new CustomerShortNames(); - - newOne.setId(aCustomer.getId()); - newOne.setFirstName(aCustomer.getFirstName()); - newOne.setLastName(aCustomer.getLastName()); - newOne.setStreet(aCustomer.getStreet()); - newOne.setCity(aCustomer.getCity()); - newOne.setPostalCode(aCustomer.getPostalCode()); - newOne.setState(aCustomer.getState()); - newOne.setPhoneNumber(aCustomer.getPhoneNumber()); - newOne.setEmail(aCustomer.getEmail()); - - feedback[i] = newOne; - } - - return feedback; - } - -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java b/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java deleted file mode 100644 index e2ef4664cfaf..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlim.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.util.Objects; - -public class CustomerSlim { - private long id; - private String name; - private String address; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - @Override - public int hashCode() { - return Objects.hash(address, id, name); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof CustomerSlim)) { - return false; - } - CustomerSlim other = (CustomerSlim) obj; - return Objects.equals(address, other.address) && id == other.id && Objects.equals(name, other.name); - } - - @Override - public String toString() { - return "CustomerSlim [id=" + id + ", name=" + name + ", address=" + address + "]"; - } - - public static CustomerSlim[] fromCustomers(Customer[] customers) { - CustomerSlim[] feedback = new CustomerSlim[customers.length]; - - for (int i = 0; i < customers.length; i++) { - Customer aCustomer = customers[i]; - CustomerSlim newOne = new CustomerSlim(); - - newOne.setId(aCustomer.getId()); - newOne.setName(aCustomer.getFirstName() + " " + aCustomer.getLastName()); - newOne.setAddress(aCustomer.getStreet() + ", " + aCustomer.getCity() + " " + aCustomer.getState() + " " + aCustomer.getPostalCode()); - - feedback[i] = newOne; - } - - return feedback; - } - -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java b/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java deleted file mode 100644 index 296ee6fdf6cf..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class CustomerSlimDeserializer extends StdDeserializer { - private static final long serialVersionUID = 1L; - - public CustomerSlimDeserializer() { - this(null); - } - - public CustomerSlimDeserializer(Class t) { - super(t); - } - - @Override - public CustomerSlim deserialize(JsonParser parser, DeserializationContext deserializer) throws IOException { - CustomerSlim feedback = new CustomerSlim(); - ObjectCodec codec = parser.getCodec(); - JsonNode node = codec.readTree(parser); - - feedback.setId(node.get(0) - .asLong()); - feedback.setName(node.get(1) - .asText()); - feedback.setAddress(node.get(2) - .asText()); - - return feedback; - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java b/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java deleted file mode 100644 index 520c541da6d8..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimSerializer.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomerSlimSerializer extends StdSerializer { - private static final long serialVersionUID = 1L; - - public CustomerSlimSerializer() { - this(null); - } - - public CustomerSlimSerializer(Class t) { - super(t); - } - - @Override - public void serialize(CustomerSlim customer, JsonGenerator jsonGenerator, SerializerProvider serializer) throws IOException { - jsonGenerator.writeStartArray(); - jsonGenerator.writeNumber(customer.getId()); - jsonGenerator.writeString(customer.getName()); - jsonGenerator.writeString(customer.getAddress()); - jsonGenerator.writeEndArray(); - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java b/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java deleted file mode 100644 index bf00e847acfb..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonoptimization/CustomerSlimShortNames.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.baeldung.jsonoptimization; - -import java.util.Objects; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class CustomerSlimShortNames { - - @JsonProperty("i") - private long id; - - @JsonProperty("n") - private String name; - - @JsonProperty("a") - private String address; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - @Override - public int hashCode() { - return Objects.hash(address, id, name); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof CustomerSlimShortNames)) { - return false; - } - CustomerSlimShortNames other = (CustomerSlimShortNames) obj; - return Objects.equals(address, other.address) && id == other.id && Objects.equals(name, other.name); - } - - @Override - public String toString() { - return "CustomerSlim [id=" + id + ", name=" + name + ", address=" + address + "]"; - } - - public static CustomerSlimShortNames[] fromCustomers(Customer[] customers) { - CustomerSlimShortNames[] feedback = new CustomerSlimShortNames[customers.length]; - - for (int i = 0; i < customers.length; i++) { - Customer aCustomer = customers[i]; - CustomerSlimShortNames newOne = new CustomerSlimShortNames(); - - newOne.setId(aCustomer.getId()); - newOne.setName(aCustomer.getFirstName() + " " + aCustomer.getLastName()); - newOne.setAddress(aCustomer.getStreet() + ", " + aCustomer.getCity() + " " + aCustomer.getState() + " " + aCustomer.getPostalCode()); - - feedback[i] = newOne; - } - - return feedback; - } - -} diff --git a/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java b/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java deleted file mode 100644 index 1b18463856de..000000000000 --- a/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.baeldung.jsontojavaclass; - -import java.io.File; -import java.io.IOException; -import java.net.URL; - -import org.jsonschema2pojo.DefaultGenerationConfig; -import org.jsonschema2pojo.GenerationConfig; -import org.jsonschema2pojo.Jackson2Annotator; -import org.jsonschema2pojo.SchemaGenerator; -import org.jsonschema2pojo.SchemaMapper; -import org.jsonschema2pojo.SchemaStore; -import org.jsonschema2pojo.SourceType; -import org.jsonschema2pojo.rules.RuleFactory; - -import com.sun.codemodel.JCodeModel; - -public class JsonToJavaClassConversion { - - public static void main(String[] args) { - String packageName = "com.baeldung.jsontojavaclass.pojo"; - String basePath = "src/main/resources"; - File inputJson = new File(basePath + File.separator + "input.json"); - File outputPojoDirectory = new File(basePath + File.separator + "convertedPojo"); - outputPojoDirectory.mkdirs(); - try { - new JsonToJavaClassConversion().convertJsonToJavaClass(inputJson.toURI().toURL(), outputPojoDirectory, packageName, inputJson.getName().replace(".json", "")); - } catch (IOException e) { - System.out.println("Encountered issue while converting to pojo: " + e.getMessage()); - e.printStackTrace(); - } - } - - - public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName) throws IOException { - JCodeModel jcodeModel = new JCodeModel(); - - GenerationConfig config = new DefaultGenerationConfig() { - @Override - public boolean isGenerateBuilders() { - return true; - } - - @Override - public SourceType getSourceType() { - return SourceType.JSON; - } - }; - - SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator()); - mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl); - - jcodeModel.build(outputJavaClassDirectory); - } - -} diff --git a/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java deleted file mode 100644 index 38ebb8a0f8aa..000000000000 --- a/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java +++ /dev/null @@ -1,213 +0,0 @@ - -package com.baeldung.jsontojavaclass.pojo; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonPropertyOrder({ - "name", - "area", - "author", - "id", - "salary", - "topics" -}) -@Generated("jsonschema2pojo") -public class SamplePojo { - - @JsonProperty("name") - private String name; - @JsonProperty("area") - private String area; - @JsonProperty("author") - private String author; - @JsonProperty("id") - private Integer id; - @JsonProperty("salary") - private Integer salary; - @JsonProperty("topics") - private List topics = new ArrayList(); - @JsonIgnore - private Map additionalProperties = new HashMap(); - - @JsonProperty("name") - public String getName() { - return name; - } - - @JsonProperty("name") - public void setName(String name) { - this.name = name; - } - - public SamplePojo withName(String name) { - this.name = name; - return this; - } - - @JsonProperty("area") - public String getArea() { - return area; - } - - @JsonProperty("area") - public void setArea(String area) { - this.area = area; - } - - public SamplePojo withArea(String area) { - this.area = area; - return this; - } - - @JsonProperty("author") - public String getAuthor() { - return author; - } - - @JsonProperty("author") - public void setAuthor(String author) { - this.author = author; - } - - public SamplePojo withAuthor(String author) { - this.author = author; - return this; - } - - @JsonProperty("id") - public Integer getId() { - return id; - } - - @JsonProperty("id") - public void setId(Integer id) { - this.id = id; - } - - public SamplePojo withId(Integer id) { - this.id = id; - return this; - } - - @JsonProperty("salary") - public Integer getSalary() { - return salary; - } - - @JsonProperty("salary") - public void setSalary(Integer salary) { - this.salary = salary; - } - - public SamplePojo withSalary(Integer salary) { - this.salary = salary; - return this; - } - - @JsonProperty("topics") - public List getTopics() { - return topics; - } - - @JsonProperty("topics") - public void setTopics(List topics) { - this.topics = topics; - } - - public SamplePojo withTopics(List topics) { - this.topics = topics; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - } - - public SamplePojo withAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - return this; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); - sb.append("name"); - sb.append('='); - sb.append(((this.name == null)?"":this.name)); - sb.append(','); - sb.append("area"); - sb.append('='); - sb.append(((this.area == null)?"":this.area)); - sb.append(','); - sb.append("author"); - sb.append('='); - sb.append(((this.author == null)?"":this.author)); - sb.append(','); - sb.append("id"); - sb.append('='); - sb.append(((this.id == null)?"":this.id)); - sb.append(','); - sb.append("salary"); - sb.append('='); - sb.append(((this.salary == null)?"":this.salary)); - sb.append(','); - sb.append("topics"); - sb.append('='); - sb.append(((this.topics == null)?"":this.topics)); - sb.append(','); - sb.append("additionalProperties"); - sb.append('='); - sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); - sb.append(','); - if (sb.charAt((sb.length()- 1)) == ',') { - sb.setCharAt((sb.length()- 1), ']'); - } else { - sb.append(']'); - } - return sb.toString(); - } - - @Override - public int hashCode() { - int result = 1; - result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); - result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); - result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); - result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); - result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); - result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); - result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); - return result; - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if ((other instanceof SamplePojo) == false) { - return false; - } - SamplePojo rhs = ((SamplePojo) other); - return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); - } - -} diff --git a/json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java b/json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java deleted file mode 100644 index 841513fc2822..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonvalidation/GsonValidator.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.jsonvalidation; - -import java.io.IOException; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; -import com.google.gson.TypeAdapter; - -public class GsonValidator { - - final TypeAdapter strictAdapter = new Gson().getAdapter(JsonElement.class); - - public boolean isValid(String json) { - try { - JsonParser.parseString(json); - } catch (JsonSyntaxException e) { - return false; - } - return true; - } - - public boolean isValidStrict(String json) { - try { - strictAdapter.fromJson(json); - } catch (JsonSyntaxException | IOException e) { - return false; - } - return true; - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java b/json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java deleted file mode 100644 index 8c339f46c815..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonvalidation/JacksonValidator.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.jsonvalidation; - -import com.fasterxml.jackson.core.JacksonException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonValidator { - - final ObjectMapper mapper = new ObjectMapper(); - - public boolean isValid(String json) { - try { - mapper.readTree(json); - } catch (JacksonException e) { - return false; - } - return true; - } -} diff --git a/json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java b/json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java deleted file mode 100644 index e4183e23224c..000000000000 --- a/json-2/src/main/java/com/baeldung/jsonvalidation/JsonValidator.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.jsonvalidation; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -public class JsonValidator { - - public boolean isValidObject(String json) { - try { - new JSONObject(json); - } catch (JSONException e) { - return false; - } - return true; - } - - public boolean isValidJson(String json) { - try { - new JSONObject(json); - } catch (JSONException e) { - try { - new JSONArray(json); - } catch (JSONException ne) { - return false; - } - } - return true; - } -} diff --git a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java deleted file mode 100644 index e3d901edf422..000000000000 --- a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java +++ /dev/null @@ -1,119 +0,0 @@ - -package com.baeldung.jsontojavaclass.pojo; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonPropertyOrder({ - "city", - "country" -}) -@Generated("jsonschema2pojo") -public class Address { - - @JsonProperty("city") - private String city; - @JsonProperty("country") - private String country; - @JsonIgnore - private Map additionalProperties = new HashMap(); - - @JsonProperty("city") - public String getCity() { - return city; - } - - @JsonProperty("city") - public void setCity(String city) { - this.city = city; - } - - public Address withCity(String city) { - this.city = city; - return this; - } - - @JsonProperty("country") - public String getCountry() { - return country; - } - - @JsonProperty("country") - public void setCountry(String country) { - this.country = country; - } - - public Address withCountry(String country) { - this.country = country; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - } - - public Address withAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - return this; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(Address.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); - sb.append("city"); - sb.append('='); - sb.append(((this.city == null)?"":this.city)); - sb.append(','); - sb.append("country"); - sb.append('='); - sb.append(((this.country == null)?"":this.country)); - sb.append(','); - sb.append("additionalProperties"); - sb.append('='); - sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); - sb.append(','); - if (sb.charAt((sb.length()- 1)) == ',') { - sb.setCharAt((sb.length()- 1), ']'); - } else { - sb.append(']'); - } - return sb.toString(); - } - - @Override - public int hashCode() { - int result = 1; - result = ((result* 31)+((this.country == null)? 0 :this.country.hashCode())); - result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); - result = ((result* 31)+((this.city == null)? 0 :this.city.hashCode())); - return result; - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if ((other instanceof Address) == false) { - return false; - } - Address rhs = ((Address) other); - return ((((this.country == rhs.country)||((this.country!= null)&&this.country.equals(rhs.country)))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.city == rhs.city)||((this.city!= null)&&this.city.equals(rhs.city)))); - } - -} diff --git a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java deleted file mode 100644 index 19bee8db4d95..000000000000 --- a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java +++ /dev/null @@ -1,213 +0,0 @@ - -package com.baeldung.jsontojavaclass.pojo; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonPropertyOrder({ - "name", - "area", - "author", - "id", - "topics", - "address" -}) -@Generated("jsonschema2pojo") -public class Input { - - @JsonProperty("name") - private String name; - @JsonProperty("area") - private String area; - @JsonProperty("author") - private String author; - @JsonProperty("id") - private Integer id; - @JsonProperty("topics") - private List topics = new ArrayList(); - @JsonProperty("address") - private Address address; - @JsonIgnore - private Map additionalProperties = new HashMap(); - - @JsonProperty("name") - public String getName() { - return name; - } - - @JsonProperty("name") - public void setName(String name) { - this.name = name; - } - - public Input withName(String name) { - this.name = name; - return this; - } - - @JsonProperty("area") - public String getArea() { - return area; - } - - @JsonProperty("area") - public void setArea(String area) { - this.area = area; - } - - public Input withArea(String area) { - this.area = area; - return this; - } - - @JsonProperty("author") - public String getAuthor() { - return author; - } - - @JsonProperty("author") - public void setAuthor(String author) { - this.author = author; - } - - public Input withAuthor(String author) { - this.author = author; - return this; - } - - @JsonProperty("id") - public Integer getId() { - return id; - } - - @JsonProperty("id") - public void setId(Integer id) { - this.id = id; - } - - public Input withId(Integer id) { - this.id = id; - return this; - } - - @JsonProperty("topics") - public List getTopics() { - return topics; - } - - @JsonProperty("topics") - public void setTopics(List topics) { - this.topics = topics; - } - - public Input withTopics(List topics) { - this.topics = topics; - return this; - } - - @JsonProperty("address") - public Address getAddress() { - return address; - } - - @JsonProperty("address") - public void setAddress(Address address) { - this.address = address; - } - - public Input withAddress(Address address) { - this.address = address; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - } - - public Input withAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - return this; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(Input.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); - sb.append("name"); - sb.append('='); - sb.append(((this.name == null)?"":this.name)); - sb.append(','); - sb.append("area"); - sb.append('='); - sb.append(((this.area == null)?"":this.area)); - sb.append(','); - sb.append("author"); - sb.append('='); - sb.append(((this.author == null)?"":this.author)); - sb.append(','); - sb.append("id"); - sb.append('='); - sb.append(((this.id == null)?"":this.id)); - sb.append(','); - sb.append("topics"); - sb.append('='); - sb.append(((this.topics == null)?"":this.topics)); - sb.append(','); - sb.append("address"); - sb.append('='); - sb.append(((this.address == null)?"":this.address)); - sb.append(','); - sb.append("additionalProperties"); - sb.append('='); - sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); - sb.append(','); - if (sb.charAt((sb.length()- 1)) == ',') { - sb.setCharAt((sb.length()- 1), ']'); - } else { - sb.append(']'); - } - return sb.toString(); - } - - @Override - public int hashCode() { - int result = 1; - result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); - result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); - result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); - result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); - result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); - result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); - result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); - return result; - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if ((other instanceof Input) == false) { - return false; - } - Input rhs = ((Input) other); - return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address))))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties)))); - } - -} diff --git a/json-2/src/main/resources/input.json b/json-2/src/main/resources/input.json deleted file mode 100644 index 22706ede5348..000000000000 --- a/json-2/src/main/resources/input.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "Baeldung", - "area": "tech blogs", - "author": "Eugen", - "id": 32134, - "topics": [ - "java", - "kotlin", - "cs", - "linux" - ], - "address": { - "city": "Bucharest", - "country": "Romania" - } -} \ No newline at end of file diff --git a/json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java b/json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java deleted file mode 100644 index eec7a1c95fb0..000000000000 --- a/json-2/src/test/java/com/baeldung/fastjson/FastJsonUnitTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.baeldung.fastjson; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.serializer.BeanContext; -import com.alibaba.fastjson.serializer.ContextValueFilter; -import com.alibaba.fastjson.serializer.NameFilter; -import com.alibaba.fastjson.serializer.SerializeConfig; -import org.junit.Before; -import org.junit.Test; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import static org.junit.Assert.assertEquals; - -public class FastJsonUnitTest { - private List listOfPersons; - - @Before - public void setUp() { - listOfPersons = new ArrayList(); - Calendar calendar = Calendar.getInstance(); - calendar.set(2016, 6, 24); - listOfPersons.add(new Person(15, "John", "Doe", calendar.getTime())); - listOfPersons.add(new Person(20, "Janette", "Doe", calendar.getTime())); - } - - @Test - public void whenJavaList_thanConvertToJsonCorrect() { - String personJsonFormat = JSON.toJSONString(listOfPersons); - assertEquals(personJsonFormat, "[{\"FIRST NAME\":\"Doe\",\"LAST NAME\":\"John\",\"DATE OF BIRTH\":" + "\"24/07/2016\"},{\"FIRST NAME\":\"Doe\",\"LAST NAME\":\"Janette\",\"DATE OF BIRTH\":" + "\"24/07/2016\"}]"); - } - - @Test - public void whenJson_thanConvertToObjectCorrect() { - String personJsonFormat = JSON.toJSONString(listOfPersons.get(0)); - Person newPerson = JSON.parseObject(personJsonFormat, Person.class); - assertEquals(newPerson.getAge(), 0); // serialize is set to false for age attribute - assertEquals(newPerson.getFirstName(), listOfPersons.get(0) - .getFirstName()); - assertEquals(newPerson.getLastName(), listOfPersons.get(0) - .getLastName()); - } - - @Test - public void whenGenerateJson_thanGenerationCorrect() throws ParseException { - JSONArray jsonArray = new JSONArray(); - for (int i = 0; i < 2; i++) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("FIRST NAME", "John" + i); - jsonObject.put("LAST NAME", "Doe" + i); - jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12"); - jsonArray.add(jsonObject); - } - assertEquals(jsonArray.toString(), "[{\"LAST NAME\":\"Doe0\",\"DATE OF BIRTH\":" + "\"2016/12/12 12:12:12\",\"FIRST NAME\":\"John0\"},{\"LAST NAME\":\"Doe1\"," + "\"DATE OF BIRTH\":\"2016/12/12 12:12:12\",\"FIRST NAME\":\"John1\"}]"); - } - - @Test - public void givenContextFilter_whenJavaObject_thanJsonCorrect() { - ContextValueFilter valueFilter = new ContextValueFilter() { - public Object process(BeanContext context, Object object, String name, Object value) { - if (name.equals("DATE OF BIRTH")) { - return "NOT TO DISCLOSE"; - } - if (value.equals("John") || value.equals("Doe")) { - return ((String) value).toUpperCase(); - } else { - return null; - } - } - }; - JSON.toJSONString(listOfPersons, valueFilter); - } - - @Test - public void givenSerializeConfig_whenJavaObject_thanJsonCorrect() { - NameFilter formatName = new NameFilter() { - public String process(Object object, String name, Object value) { - return name.toLowerCase() - .replace(" ", "_"); - } - }; - SerializeConfig.getGlobalInstance() - .addFilter(Person.class, formatName); - String jsonOutput = JSON.toJSONStringWithDateFormat(listOfPersons, "yyyy-MM-dd"); - assertEquals(jsonOutput, "[{\"first_name\":\"Doe\",\"last_name\":\"John\"," + "\"date_of_birth\":\"2016-07-24\"},{\"first_name\":\"Doe\",\"last_name\":" + "\"Janette\",\"date_of_birth\":\"2016-07-24\"}]"); - // resetting custom serializer - SerializeConfig.getGlobalInstance() - .put(Person.class, null); - } -} diff --git a/json-2/src/test/java/com/baeldung/fastjson/Person.java b/json-2/src/test/java/com/baeldung/fastjson/Person.java deleted file mode 100644 index 5e142131a370..000000000000 --- a/json-2/src/test/java/com/baeldung/fastjson/Person.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.baeldung.fastjson; - -import com.alibaba.fastjson.annotation.JSONField; - -import java.util.Date; - -public class Person { - - @JSONField(name = "AGE", serialize = false, deserialize = false) - private int age; - - @JSONField(name = "LAST NAME", ordinal = 2) - private String lastName; - - @JSONField(name = "FIRST NAME", ordinal = 1) - private String firstName; - - @JSONField(name = "DATE OF BIRTH", format = "dd/MM/yyyy", ordinal = 3) - private Date dateOfBirth; - - public Person() { - - } - - public Person(int age, String lastName, String firstName, Date dateOfBirth) { - super(); - this.age = age; - this.lastName = lastName; - this.firstName = firstName; - this.dateOfBirth = dateOfBirth; - } - - @Override - public String toString() { - return "Person [age=" + age + ", lastName=" + lastName + ", firstName=" + firstName + ", dateOfBirth=" + dateOfBirth + "]"; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } -} diff --git a/json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java b/json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java deleted file mode 100644 index 09f82567a258..000000000000 --- a/json-2/src/test/java/com/baeldung/jsoniter/JsoniterIntroUnitTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.baeldung.jsoniter; - -import com.baeldung.jsoniter.model.Name; -import com.baeldung.jsoniter.model.Student; -import com.jsoniter.JsonIterator; -import com.jsoniter.ValueType; -import com.jsoniter.any.Any; - -import org.junit.Test; - -import static com.jsoniter.ValueType.STRING; -import static org.assertj.core.api.Assertions.assertThat; - -public class JsoniterIntroUnitTest { - - @Test - public void whenParsedUsingBindAPI_thenConvertedToJavaObjectCorrectly() { - String input = "{\"id\":1,\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; - - Student student = JsonIterator.deserialize(input, Student.class); - - assertThat(student.getId()).isEqualTo(1); - assertThat(student.getName().getFirstName()).isEqualTo("Joe"); - assertThat(student.getName().getSurname()).isEqualTo("Blogg"); - } - - @Test - public void givenTypeInJsonFuzzy_whenFieldIsMaybeDecoded_thenFieldParsedCorrectly() { - String input = "{\"id\":\"1\",\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; - - Student student = JsonIterator.deserialize(input, Student.class); - - assertThat(student.getId()).isEqualTo(1); - } - - @Test - public void whenParsedUsingAnyAPI_thenFieldValueCanBeExtractedUsingTheFieldName() { - String input = "{\"id\":1,\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; - - Any any = JsonIterator.deserialize(input); - - assertThat(any.toInt("id")).isEqualTo(1); - assertThat(any.toString("name", "firstName")).isEqualTo("Joe"); - assertThat(any.toString("name", "surname")).isEqualTo("Blogg"); - } - - @Test - public void whenParsedUsingAnyAPI_thenFieldValueTypeIsCorrect() { - String input = "{\"id\":1,\"name\":{\"firstName\":\"Joe\",\"surname\":\"Blogg\"}}"; - - Any any = JsonIterator.deserialize(input); - - assertThat(any.get("id").valueType()).isEqualTo(ValueType.NUMBER); - assertThat(any.get("name").valueType()).isEqualTo(ValueType.OBJECT); - assertThat(any.get("error").valueType()).isEqualTo(ValueType.INVALID); - } - - @Test - public void whenParsedUsingIteratorAPI_thenFieldValuesExtractedCorrectly() throws Exception { - Name name = new Name(); - String input = "{ \"firstName\" : \"Joe\", \"surname\" : \"Blogg\" }"; - JsonIterator iterator = JsonIterator.parse(input); - - for (String field = iterator.readObject(); field != null; field = iterator.readObject()) { - switch (field) { - case "firstName": - if (iterator.whatIsNext() == ValueType.STRING) { - name.setFirstName(iterator.readString()); - } - continue; - case "surname": - if (iterator.whatIsNext() == ValueType.STRING) { - name.setSurname(iterator.readString()); - } - continue; - default: - iterator.skip(); - } - } - - assertThat(name.getFirstName()).isEqualTo("Joe"); - assertThat(name.getSurname()).isEqualTo("Blogg"); - } - -} diff --git a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java deleted file mode 100644 index 24968f384748..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.jsonld.deserialization.jsonldjava.jackson; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.io.IOException; -import java.util.HashMap; - -import org.junit.jupiter.api.Test; - -import com.baeldung.jsonld.deserialization.jsonldjava.jackson.Person.Link; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.jsonldjava.core.JsonLdOptions; -import com.github.jsonldjava.core.JsonLdProcessor; -import com.github.jsonldjava.utils.JsonUtils; - -public class JacksonDeserializationUnitTest { - - @Test - void givenAJsonLdObject_whenCompactIsUsedWithEmptyContext_thenItCanBeDeserializedWithJackson() throws IOException { - String inputJsonLd = "{" - + "\"@context\":{" - + "\"@vocab\":\"http://schema.org/\"," - + "\"knows\":{\"@type\":\"@id\"}" - + "}," - + "\"@type\":\"Person\"," - + "\"@id\":\"http://example.com/person/1234\"," - + "\"name\":\"Example Name\"," - + "\"knows\":\"http://example.com/person/2345\"" - + "}"; - - Object jsonObject = JsonUtils.fromString(inputJsonLd); - Object compact = JsonLdProcessor.compact(jsonObject, new HashMap<>(), new JsonLdOptions()); - String compactContent = JsonUtils.toString(compact); - - assertEquals("{" - + "\"@id\":\"http://example.com/person/1234\"," - + "\"@type\":\"http://schema.org/Person\"," - + "\"http://schema.org/knows\":{\"@id\":\"http://example.com/person/2345\"}," - + "\"http://schema.org/name\":\"Example Name\"" - + "}", compactContent); - - ObjectMapper objectMapper = new ObjectMapper(); - Person person = objectMapper.readValue(compactContent, Person.class); - - Person expectedPerson = new Person("http://example.com/person/1234", "Example Name", new Link("http://example.com/person/2345")); - - assertEquals(expectedPerson.getId(), person.getId()); - assertEquals(expectedPerson.getName(), person.getName()); - assertEquals(expectedPerson.getKnows().getId(), person.getKnows().getId()); - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java deleted file mode 100644 index fefa6768175a..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.baeldung.jsonld.deserialization.jsonldjava.jackson; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - -@JsonIgnoreProperties(ignoreUnknown = true) -public class Person { - @JsonProperty("@id") - private String id; - @JsonProperty("http://schema.org/name") - private String name; - @JsonProperty("http://schema.org/knows") - private Link knows; - - public Person() { - } - - public Person(String id, String name, Link knows) { - this.id = id; - this.name = name; - this.knows = knows; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Link getKnows() { - return knows; - } - - public void setKnows(Link knows) { - this.knows = knows; - } - - public static class Link { - @JsonProperty("@id") - private String id; - - public Link() { - } - - public Link(String id) { - this.id = id; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java deleted file mode 100644 index 33395cc4386d..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.jsonld.serialization.hydrajsonld; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.BeanDescription; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationConfig; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; -import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase; - -import de.escalon.hypermedia.hydra.serialize.JacksonHydraSerializer; - -public class HydraJsonldSerializationUnitTest { - @Test - void givenAHydraJsonldAnnotatedObject_whenJacksonHydraSerializerIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(getJacksonHydraSerializerModule()); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - - Person person = new Person("http://example.com/person/1234", "Example Name"); - - String personJsonLd = objectMapper.writeValueAsString(person); - - assertEquals("{" - + "\"@context\":{" - + "\"@vocab\":\"http://example.com/vocab/\"," - + "\"name\":\"fullName\"" - + "}," - + "\"@type\":\"person\"," - + "\"name\":\"Example Name\"," - + "\"@id\":\"http://example.com/person/1234\"" - + "}", personJsonLd); - } - - static SimpleModule getJacksonHydraSerializerModule() { - return new SimpleModule() { - - @Override - public void setupModule(SetupContext context) { - super.setupModule(context); - - context.addBeanSerializerModifier(new BeanSerializerModifier() { - - @Override - public JsonSerializer modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer serializer) { - - if (serializer instanceof BeanSerializerBase) { - return new JacksonHydraSerializer((BeanSerializerBase) serializer); - } else { - return serializer; - } - } - }); - } - }; - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java deleted file mode 100644 index 3d8573c96584..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.jsonld.serialization.hydrajsonld; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import de.escalon.hypermedia.hydra.mapping.Expose; -import de.escalon.hypermedia.hydra.mapping.Vocab; - -@Vocab("http://example.com/vocab/") -@Expose("person") -public class Person { - private String id; - private String name; - - public Person(String id, String name) { - this.id = id; - this.name = name; - } - - @JsonProperty("@id") - public String getId() { - return id; - } - - @Expose("fullName") - public String getName() { - return name; - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java deleted file mode 100644 index 9679426acb09..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.jsonld.serialization.jacksonjsonld; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import ioinformarics.oss.jackson.module.jsonld.JsonldModule; - -public class JacksonJsonLdSerializationUnitTest { - @Test - void givenAJacksonJsonldAnnotatedObject_whenJsonldModuleIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JsonldModule()); - - Person person = new Person("http://example.com/person/1234", "Example Name"); - String personJsonLd = objectMapper.writeValueAsString(person); - - assertEquals("{" - + "\"@type\":\"s:Person\"," - + "\"@context\":{" - + "\"s\":\"http://schema.org/\"," - + "\"name\":\"s:name\"," - + "\"knows\":{\"@id\":\"s:knows\",\"@type\":\"@id\"}" - + "}," - + "\"name\":\"Example Name\"," - + "\"@id\":\"http://example.com/person/1234\"," - + "\"knows\":\"http://example.com/person/2345\"" - + "}", personJsonLd); - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java deleted file mode 100644 index b63f49840cca..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.jsonld.serialization.jacksonjsonld; - -import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId; -import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink; -import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace; -import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty; -import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldResource; -import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType; - -@JsonldResource -@JsonldNamespace(name = "s", uri = "http://schema.org/") -@JsonldType("s:Person") -@JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345") -public class Person { - @JsonldId - private String id; - @JsonldProperty("s:name") - private String name; - - public Person(String id, String name) { - this.id = id; - this.name = name; - } - - public String getId() { - return id; - } - - public String getName() { - return name; - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java deleted file mode 100644 index 7a56a68fe2ea..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonoptimization/JsonOptimizationUnitTest.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.baeldung.jsonoptimization; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.DecimalFormat; -import java.util.zip.GZIPOutputStream; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.core.Version; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.module.SimpleModule; - -class JsonOptimizationUnitTest { - private static final String TEST_LABEL_JACKSON_DEFAULT_OPTIONS = "Default JSON"; - private static final String TEST_LABEL_DEFAULT_JSON_NO_NULL = "Default JSON without null"; - private static final String TEST_LABEL_SHORTER_FIELD_NAMES = "Shorter field names"; - private static final String TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL = "Shorter field names without null"; - private static final String TEST_LABEL_SERIALIZING_TO_ARRAY = "Custom serializer"; - private static final String TEST_LABEL_SLIM_CUSTOM_SERIALIZER = "Slim custom serializer"; - private static final String TEST_LABEL_SLIM_CUSTOMER = "Slim customer"; - private static final String TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES = "Slim customer with shorter field names"; - private static DecimalFormat LENGTH_FORMATTER = new DecimalFormat("###,###.0"); - private static DecimalFormat PERCENT_FORMATTER = new DecimalFormat("###.0"); - private static Customer[] customers; - private ObjectMapper mapper; - private static int defaultJsonLength; - - @BeforeAll - static void setUpOnce() throws Exception { - customers = Customer.fromMockFile(); - ObjectMapper oneTimeMapper = new ObjectMapper(); - byte[] feedback = oneTimeMapper.writeValueAsBytes(customers); - defaultJsonLength = feedback.length; - System.out.println(); - System.out.println("Default JSON length: " + defaultJsonLength); - System.out.println(); - } - - @BeforeEach - void setUp() { - mapper = new ObjectMapper(); - } - - @Test - void whenSetUp_ThenOneThousandCustomers() { - assertEquals(1000, customers.length, "There should be a 1000 customers"); - } - - @Test - void whenJacksonDefaultOptions_thenValid() throws IOException { - printBanner(TEST_LABEL_JACKSON_DEFAULT_OPTIONS); - byte[] plainJson = createJsonAndVerify(TEST_LABEL_JACKSON_DEFAULT_OPTIONS, customers); - compressJson(TEST_LABEL_JACKSON_DEFAULT_OPTIONS, plainJson); - } - - @Test - void whenExcludingNull_thenValid() throws IOException { - printBanner(TEST_LABEL_DEFAULT_JSON_NO_NULL); - mapper.setSerializationInclusion(Include.NON_NULL); - byte[] plainJson = createJsonAndVerify(TEST_LABEL_DEFAULT_JSON_NO_NULL, customers); - compressJson(TEST_LABEL_DEFAULT_JSON_NO_NULL, plainJson); - } - - @Test - void whenShorterFieldNames_thenValid() throws IOException { - printBanner(TEST_LABEL_SHORTER_FIELD_NAMES); - CustomerShortNames[] shorterOnes = CustomerShortNames.fromCustomers(customers); - byte[] shorterJson = createJsonAndVerify(TEST_LABEL_SHORTER_FIELD_NAMES, shorterOnes); - compressJson(TEST_LABEL_SHORTER_FIELD_NAMES, shorterJson); - } - - @Test - void whenShorterFieldNamesAndExcludingNull_thenValid() throws IOException { - printBanner(TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL); - CustomerShortNames[] shorterOnes = CustomerShortNames.fromCustomers(customers); - mapper.setSerializationInclusion(Include.NON_NULL); - byte[] shorterJson = createJsonAndVerify(TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL, shorterOnes); - compressJson(TEST_LABEL_SHORTER_FIELD_NAMES_AND_NO_NULL, shorterJson); - } - - @Test - void whenSlimCustomer_thenValid() throws IOException { - printBanner(TEST_LABEL_SLIM_CUSTOMER); - CustomerSlim[] slimOnes = CustomerSlim.fromCustomers(customers); - byte[] slimJson = createJsonAndVerify(TEST_LABEL_SLIM_CUSTOMER, slimOnes); - compressJson(TEST_LABEL_SLIM_CUSTOMER, slimJson); - } - - @Test - void whenSlimCustomerAndShorterFieldNames_thenValid() throws IOException { - printBanner(TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES); - CustomerSlimShortNames[] slimOnes = CustomerSlimShortNames.fromCustomers(customers); - byte[] slimJson = createJsonAndVerify(TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES, slimOnes); - compressJson(TEST_LABEL_SLIM_CUSTOMER_SHORT_NAMES, slimJson); - } - - @Test - void whenSerializingToArray_thenValid() throws IOException { - printBanner(TEST_LABEL_SERIALIZING_TO_ARRAY); - SimpleModule serializer = new SimpleModule("CustomDeSerializer", new Version(1, 0, 0, null, null, null)); - serializer.addSerializer(Customer.class, new CustomerSerializer()); - serializer.addDeserializer(Customer.class, new CustomerDeserializer()); - mapper.registerModule(serializer); - - byte[] plainJson = createJsonAndVerify(TEST_LABEL_SERIALIZING_TO_ARRAY, customers); - compressJson(TEST_LABEL_SERIALIZING_TO_ARRAY, plainJson); - } - - @Test - void whenSerializingToArrayAndSlimCustomer_thenValid() throws IOException { - printBanner(TEST_LABEL_SLIM_CUSTOM_SERIALIZER); - SimpleModule serializer = new SimpleModule("SlimCustomDeSerializer", new Version(1, 0, 0, null, null, null)); - serializer.addSerializer(CustomerSlim.class, new CustomerSlimSerializer()); - serializer.addDeserializer(CustomerSlim.class, new CustomerSlimDeserializer()); - mapper.registerModule(serializer); - - CustomerSlim[] slimOnes = CustomerSlim.fromCustomers(customers); - byte[] plainJson = createJsonAndVerify(TEST_LABEL_SLIM_CUSTOM_SERIALIZER, slimOnes); - compressJson(TEST_LABEL_SLIM_CUSTOM_SERIALIZER, plainJson); - } - - private void printBanner(String name) { - System.out.println(); - System.out.println("************************************************"); - System.out.println("Testing " + name); - System.out.println(); - } - - void compressJson(String label, byte[] plainJson) throws IOException { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - GZIPOutputStream gzipStream = new GZIPOutputStream(outputStream); - gzipStream.write(plainJson); - gzipStream.close(); - outputStream.close(); - byte[] gzippedJson = outputStream.toByteArray(); - double length = gzippedJson.length / 1024d; - double percent = gzippedJson.length * 100d / defaultJsonLength; - System.out.println(label + " GZIPped length: " + LENGTH_FORMATTER.format(length) - + "kB (" + PERCENT_FORMATTER.format(percent) + "%)"); - assertTrue(plainJson.length > gzippedJson.length, label + " should be longer than GZIPped data"); - } - - private byte[] createJsonAndVerify(String label, Object[] customers) throws IOException { - System.out.println(label + " sample: "); - ObjectWriter prettyWritter = mapper.writerWithDefaultPrettyPrinter(); - System.out.println(prettyWritter.writeValueAsString(customers[0])); - - byte[] feedback = mapper.writeValueAsBytes(customers); - double length = feedback.length / 1024d; - double percent = feedback.length * 100d / defaultJsonLength; - System.out.println(label + " length: " + LENGTH_FORMATTER.format(length) - + "kB (" + PERCENT_FORMATTER.format(percent) + "%)"); - assertTrue(feedback.length > 1, label + " should be there"); - - String prefix = label.replaceAll(" ", "-") - .toLowerCase(); - File tempFile = File.createTempFile("jon-optimization-" + prefix, ".json"); - FileOutputStream fos = new FileOutputStream(tempFile); - fos.write(feedback); - fos.close(); - System.out.println(label + " file: " + tempFile.toString()); - - Object[] restoredOnes = mapper.readValue(feedback, customers.getClass()); - assertArrayEquals(TEST_LABEL_JACKSON_DEFAULT_OPTIONS + ": restoring from JSON should work", customers, restoredOnes); - - return feedback; - } - -} diff --git a/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java b/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java deleted file mode 100644 index f8000fa6fbf6..000000000000 --- a/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.jsontojavaclass; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.util.Arrays; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -class JsonToJavaClassConversionUnitTest { - - private JsonToJavaClassConversion jsonToJavaConversion = new JsonToJavaClassConversion(); - - @Test - void whenProvideInputJSON_thenGenerateJavaClass() throws MalformedURLException, IOException { - - String packageName = "com.baeldung.jsontojavaclass.pojo"; - - // load input JSON file - String jsonPath = "src/test/resources/"; - File inputJson = new File(jsonPath + "sample_input.json"); - - // create the local directory for generating the Java Class file - String outputPath = "src/test/resources/"; - File outputJavaClassDirectory = new File(outputPath); - - String javaClassName = "SamplePojo"; - - jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI() - .toURL(), outputJavaClassDirectory, packageName, javaClassName); - - File outputJavaClassPath = new File(outputPath + packageName.replace(".", "/")); - Assertions.assertTrue(Arrays.stream(outputJavaClassPath.listFiles()).peek(System.out::println).anyMatch(file -> (javaClassName+".java").equalsIgnoreCase(file.getName()))); - - } - -} diff --git a/json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java b/json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java deleted file mode 100644 index 3b8989bdb522..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonvalidation/GsonValidatorUnitTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.jsonvalidation; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -public class GsonValidatorUnitTest { - - private final GsonValidator validator = new GsonValidator(); - - @Test - public void givenValidObjectJson_whenValidatingNonStrict_thenValid() { - String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; - assertTrue(validator.isValid(json)); - } - - @Test - public void givenValidArrayJson_whenValidatingNonStrict_thenValid() { - String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; - assertTrue(validator.isValid(json)); - } - - @Test - public void givenInvalidJson_whenValidatingNonStrict_thenValid() { - String json = "Invalid_Json"; - assertTrue(validator.isValid(json)); - } - - @Test - public void givenInvalidJson_whenValidatingStrict_thenInvalid() { - String json = "Invalid_Json"; - assertFalse(validator.isValidStrict(json)); - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java b/json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java deleted file mode 100644 index b633af7fdc72..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonvalidation/JacksonValidatorUnitTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.jsonvalidation; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -public class JacksonValidatorUnitTest { - - private final JacksonValidator validator = new JacksonValidator(); - - @Test - public void givenValidObjectJson_whenValidating_thenValid() { - String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; - assertTrue(validator.isValid(json)); - } - - @Test - public void givenValidArrayJson_whenValidating_thenValid() { - String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; - assertTrue(validator.isValid(json)); - } - - @Test - public void givenInvalidJson_whenValidating_thenInvalid() { - String json = "Invalid_Json"; - assertFalse(validator.isValid(json)); - } -} diff --git a/json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java b/json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java deleted file mode 100644 index a590b3f7094f..000000000000 --- a/json-2/src/test/java/com/baeldung/jsonvalidation/JsonValidatorUnitTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.jsonvalidation; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -public class JsonValidatorUnitTest { - - private final JsonValidator validator = new JsonValidator(); - - @Test - public void givenValidObjectJson_whenValidatingObject_thenValid() { - String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; - assertTrue(validator.isValidObject(json)); - } - - @Test - public void givenInvalidJson_whenValidating_thenInvalid() { - String json = "Invalid_Json"; - assertFalse(validator.isValidObject(json)); - } - - @Test - public void givenValidArrayJson_whenValidatingObject_thenInvalid() { - String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; - assertFalse(validator.isValidObject(json)); - } - - @Test - public void givenValidJson_whenValidatingJson_thenValid() { - String json = "[{\"email\": \"example@com\", \"name\": \"John\"},{\"email\": \"example1@com\", \"name\": \"Bob\"}]"; - assertTrue(validator.isValidJson(json)); - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java deleted file mode 100644 index 63d80bfe5868..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/AlternativeAdapterUnitTest.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.time.Instant; - -import com.squareup.moshi.FromJson; -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.JsonQualifier; -import com.squareup.moshi.Moshi; -import com.squareup.moshi.ToJson; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.junit.Test; - -public class AlternativeAdapterUnitTest { - @Test - public void whenSerializing_thenAlternativeAdapterUsed() { - Moshi moshi = new Moshi.Builder() - .add(new EpochMillisAdapter()) - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - String json = jsonAdapter.toJson(new Post("Introduction to Moshi Json", "Baeldung", Instant.now())); - System.out.println(json); - } - - @Test - public void whenDeserializing_thenAlternativeAdapterUsed() throws IOException { - Moshi moshi = new Moshi.Builder() - .add(new EpochMillisAdapter()) - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - String json = "{\"author\":\"Baeldung\",\"posted\":1582095269204,\"title\":\"Introduction to Moshi Json\"}"; - Post post = jsonAdapter.fromJson(json); - System.out.println(post); - - } - - public static class Post { - String title; - String author; - @EpochMillis Instant posted; - - public Post() { - } - - public Post(String title, String author, Instant posted) { - this.title = title; - this.author = author; - this.posted = posted; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = author; - } - - public Instant getPosted() { - return posted; - } - - public void setPosted(Instant posted) { - this.posted = posted; - } - - @Override - public String toString() { - return new ToStringBuilder(this).append("title", title).append("author", author).append("posted", posted) - .toString(); - } - } - @Retention(RetentionPolicy.RUNTIME) - @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) - @JsonQualifier - public @interface EpochMillis { - } - - public static class EpochMillisAdapter { - @ToJson - public Long toJson(@EpochMillis Instant input) { - return input.toEpochMilli(); - } - @FromJson - @EpochMillis - public Instant fromJson(Long input) { - return Instant.ofEpochMilli(input); - } - - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java deleted file mode 100644 index 83bb2bb1283d..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/ArrayUnitTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.Arrays; -import java.util.List; - -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.Moshi; -import com.squareup.moshi.Types; -import org.junit.Test; - -public class ArrayUnitTest { - @Test - public void whenSerializingList_thenJsonArrayProduced() { - Moshi moshi = new Moshi.Builder() - .build(); - Type type = Types.newParameterizedType(List.class, String.class); - JsonAdapter> jsonAdapter = moshi.adapter(type); - - String json = jsonAdapter.toJson(Arrays.asList("One", "Two", "Three")); - System.out.println(json); - } - - @Test - public void whenDeserializingJsonArray_thenListProduced() throws IOException { - Moshi moshi = new Moshi.Builder() - .build(); - Type type = Types.newParameterizedType(List.class, String.class); - JsonAdapter> jsonAdapter = moshi.adapter(type); - - String json = "[\"One\",\"Two\",\"Three\"]"; - List result = jsonAdapter.fromJson(json); - System.out.println(result); - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java deleted file mode 100644 index f0f8e9a95d45..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/ComplexAdapterUnitTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; - -import com.squareup.moshi.FromJson; -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.Moshi; -import com.squareup.moshi.ToJson; -import org.junit.Test; - -public class ComplexAdapterUnitTest { - @Test - public void whenSerializing_thenCorrectJsonProduced() { - Moshi moshi = new Moshi.Builder() - .add(new JsonDateTimeAdapter()) - .build(); - JsonAdapter jsonAdapter = moshi.adapter(ZonedDateTime.class); - - String json = jsonAdapter.toJson(ZonedDateTime.now()); - System.out.println(json); - } - - @Test - public void whenDeserializing_thenCorrectJsonConsumed() throws IOException { - Moshi moshi = new Moshi.Builder() - .add(new JsonDateTimeAdapter()) - .build(); - JsonAdapter jsonAdapter = moshi.adapter(ZonedDateTime.class); - - String json = "{\"date\":\"2020-02-17\",\"time\":\"07:53:27.064\",\"timezone\":\"Europe/London\"}"; - ZonedDateTime now = jsonAdapter.fromJson(json); - System.out.println(now); - - } - - public static class JsonDateTimeAdapter { - @ToJson - public JsonDateTime toJson(ZonedDateTime input) { - String date = input.toLocalDate().toString(); - String time = input.toLocalTime().toString(); - String timezone = input.getZone().toString(); - return new JsonDateTime(date, time, timezone); - } - @FromJson - public ZonedDateTime fromJson(JsonDateTime input) { - LocalDate date = LocalDate.parse(input.getDate()); - LocalTime time = LocalTime.parse(input.getTime()); - ZoneId timezone = ZoneId.of(input.getTimezone()); - return ZonedDateTime.of(date, time, timezone); - } - } - public static class JsonDateTime { - private String date; - private String time; - private String timezone; - - public JsonDateTime() { - } - - public JsonDateTime(String date, String time, String timezone) { - this.date = date; - this.time = time; - this.timezone = timezone; - } - - public String getDate() { - return date; - } - - public void setDate(String date) { - this.date = date; - } - - public String getTime() { - return time; - } - - public void setTime(String time) { - this.time = time; - } - - public String getTimezone() { - return timezone; - } - - public void setTimezone(String timezone) { - this.timezone = timezone; - } - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java deleted file mode 100644 index 0b4ecc23a561..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/DefaultUnitTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; -import java.time.Instant; - -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.Moshi; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.junit.Test; - -public class DefaultUnitTest { - - @Test - public void whenDeserializing_thenFieldsGetDefaultValues() throws IOException { - Moshi moshi = new Moshi.Builder() - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - String json = "{\"title\":\"My Post\"}"; - Post post = jsonAdapter.fromJson(json); - System.out.println(post); - } - public static class Post { - private String title; - private String author; - private String posted; - - public Post() { - posted = Instant.now().toString(); - } - - public Post(String title, String author, String posted) { - this.title = title; - this.author = author; - this.posted = posted; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = author; - } - - public String getPosted() { - return posted; - } - - public void setPosted(String posted) { - this.posted = posted; - } - - @Override - public String toString() { - return new ToStringBuilder(this).append("title", title).append("author", author).append("posted", posted) - .toString(); - } - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java deleted file mode 100644 index e26e93ba8c38..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/PrimitiveUnitTest.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; - -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.Moshi; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.junit.Test; - -public class PrimitiveUnitTest { - @Test - public void whenSerializing_thenCorrectJsonProduced() { - Moshi moshi = new Moshi.Builder() - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - Post post = new Post("My Post", "Baeldung", "This is my post"); - String json = jsonAdapter.toJson(post); - System.out.println(json); - } - - @Test - public void whenDeserializing_thenCorrectJsonConsumed() throws IOException { - Moshi moshi = new Moshi.Builder() - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - String json = "{\"author\":\"Baeldung\",\"text\":\"This is my post\",\"title\":\"My Post\"}"; - Post post = jsonAdapter.fromJson(json); - System.out.println(post); - } - - public static class Post { - private String title; - private String author; - private String text; - - public Post() { - } - - public Post(String title, String author, String text) { - this.title = title; - this.author = author; - this.text = text; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = author; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - @Override - public String toString() { - return new ToStringBuilder(this).append("title", title).append("author", author).append("text", text) - .toString(); - } - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java deleted file mode 100644 index 2118538a190d..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/RenameUnitTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; - -import com.squareup.moshi.Json; -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.Moshi; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.junit.jupiter.api.Test; - -public class RenameUnitTest { - - @Test - public void whenSerializing_thenFieldsGetRenamed() { - Moshi moshi = new Moshi.Builder() - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - Post post = new Post("My Post", "Baeldung"); - String json = jsonAdapter.toJson(post); - System.out.println(json); - } - - @Test - public void whenSerializing_thenRenamedFieldsGetConsumed() throws IOException { - Moshi moshi = new Moshi.Builder() - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - String json = "{\"authored_by\":\"Baeldung\",\"title\":\"My Post\"}"; - Post post = jsonAdapter.fromJson(json); - System.out.println(post); - } - public static class Post { - private String title; - @Json(name = "authored_by") - private String author; - - public Post() { - } - - public Post(String title, String author) { - this.title = title; - this.author = author; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = author; - } - - @Override - public String toString() { - return new ToStringBuilder(this).append("title", title).append("author", author).toString(); - } - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java deleted file mode 100644 index e0be2f8a666b..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/SimpleAdapterUnitTest.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.squareup.moshi.FromJson; -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.Moshi; -import com.squareup.moshi.ToJson; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.junit.Test; - -public class SimpleAdapterUnitTest { - @Test - public void whenSerializing_thenAdapterUsed() { - Moshi moshi = new Moshi.Builder() - .add(new AuthorAdapter()) - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - Post post = new Post("My Post", new Author("Baeldung", "baeldung@example.com"), "This is my post"); - String json = jsonAdapter.toJson(post); - System.out.println(json); - } - - @Test - public void whenDeserializing_thenAdapterUsed() throws IOException { - Moshi moshi = new Moshi.Builder() - .add(new AuthorAdapter()) - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - String json = "{\"author\":\"Baeldung \",\"text\":\"This is my post\",\"title\":\"My Post\"}"; - Post post = jsonAdapter.fromJson(json); - System.out.println(post); - } - public static class AuthorAdapter { - private Pattern pattern = Pattern.compile("^(.*) <(.*)>$"); - @ToJson - public String toJson(Author author) { - return author.name + " <" + author.email + ">"; - } - - @FromJson - public Author fromJson(String author) { - Matcher matcher = pattern.matcher(author); - return matcher.find() ? new Author(matcher.group(1), matcher.group(2)) : null; - } - } - - public static class Author { - private String name; - private String email; - - public Author() { - } - - public Author(String name, String email) { - this.name = name; - this.email = email; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @Override - public String toString() { - return new ToStringBuilder(this).append("name", name).append("email", email).toString(); - } - } - public static class Post { - private String title; - private Author author; - private String text; - - public Post() { - } - - public Post(String title, Author author, String text) { - this.title = title; - this.author = author; - this.text = text; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Author getAuthor() { - return author; - } - - public void setAuthor(Author author) { - this.author = author; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - @Override - public String toString() { - return new ToStringBuilder(this).append("title", title).append("author", author).append("text", text) - .toString(); - } - } -} diff --git a/json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java b/json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java deleted file mode 100644 index 2554e937b34f..000000000000 --- a/json-2/src/test/java/com/baeldung/moshi/TransientUnitTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.baeldung.moshi; - -import java.io.IOException; - -import com.squareup.moshi.JsonAdapter; -import com.squareup.moshi.Moshi; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.junit.jupiter.api.Test; - -public class TransientUnitTest { - - @Test - public void whenSerializing_thenTransientFieldIgnored() { - Moshi moshi = new Moshi.Builder() - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - Post post = new Post("My Post", "Baeldung"); - String json = jsonAdapter.toJson(post); - System.out.println(json); - } - - @Test - public void whenDeserializing_thenTransientFieldIgnored() throws IOException { - Moshi moshi = new Moshi.Builder() - .build(); - JsonAdapter jsonAdapter = moshi.adapter(Post.class); - - String json = "{\"authored_by\":\"Baeldung\",\"title\":\"My Post\"}"; - Post post = jsonAdapter.fromJson(json); - System.out.println(post); - } - public static class Post { - private String title; - private transient String author; - - public Post() { - } - - public Post(String title, String author) { - this.title = title; - this.author = author; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = author; - } - - @Override - public String toString() { - return new ToStringBuilder(this).append("title", title).append("author", author).toString(); - } - } -} diff --git a/json-2/src/test/resources/Student.json b/json-2/src/test/resources/Student.json deleted file mode 100644 index 7ff3351e8e74..000000000000 --- a/json-2/src/test/resources/Student.json +++ /dev/null @@ -1 +0,0 @@ -{"id":1,"name":{"firstName": "Joe", "surname":"Blogg"}} diff --git a/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java deleted file mode 100644 index 38ebb8a0f8aa..000000000000 --- a/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java +++ /dev/null @@ -1,213 +0,0 @@ - -package com.baeldung.jsontojavaclass.pojo; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonPropertyOrder({ - "name", - "area", - "author", - "id", - "salary", - "topics" -}) -@Generated("jsonschema2pojo") -public class SamplePojo { - - @JsonProperty("name") - private String name; - @JsonProperty("area") - private String area; - @JsonProperty("author") - private String author; - @JsonProperty("id") - private Integer id; - @JsonProperty("salary") - private Integer salary; - @JsonProperty("topics") - private List topics = new ArrayList(); - @JsonIgnore - private Map additionalProperties = new HashMap(); - - @JsonProperty("name") - public String getName() { - return name; - } - - @JsonProperty("name") - public void setName(String name) { - this.name = name; - } - - public SamplePojo withName(String name) { - this.name = name; - return this; - } - - @JsonProperty("area") - public String getArea() { - return area; - } - - @JsonProperty("area") - public void setArea(String area) { - this.area = area; - } - - public SamplePojo withArea(String area) { - this.area = area; - return this; - } - - @JsonProperty("author") - public String getAuthor() { - return author; - } - - @JsonProperty("author") - public void setAuthor(String author) { - this.author = author; - } - - public SamplePojo withAuthor(String author) { - this.author = author; - return this; - } - - @JsonProperty("id") - public Integer getId() { - return id; - } - - @JsonProperty("id") - public void setId(Integer id) { - this.id = id; - } - - public SamplePojo withId(Integer id) { - this.id = id; - return this; - } - - @JsonProperty("salary") - public Integer getSalary() { - return salary; - } - - @JsonProperty("salary") - public void setSalary(Integer salary) { - this.salary = salary; - } - - public SamplePojo withSalary(Integer salary) { - this.salary = salary; - return this; - } - - @JsonProperty("topics") - public List getTopics() { - return topics; - } - - @JsonProperty("topics") - public void setTopics(List topics) { - this.topics = topics; - } - - public SamplePojo withTopics(List topics) { - this.topics = topics; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - } - - public SamplePojo withAdditionalProperty(String name, Object value) { - this.additionalProperties.put(name, value); - return this; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); - sb.append("name"); - sb.append('='); - sb.append(((this.name == null)?"":this.name)); - sb.append(','); - sb.append("area"); - sb.append('='); - sb.append(((this.area == null)?"":this.area)); - sb.append(','); - sb.append("author"); - sb.append('='); - sb.append(((this.author == null)?"":this.author)); - sb.append(','); - sb.append("id"); - sb.append('='); - sb.append(((this.id == null)?"":this.id)); - sb.append(','); - sb.append("salary"); - sb.append('='); - sb.append(((this.salary == null)?"":this.salary)); - sb.append(','); - sb.append("topics"); - sb.append('='); - sb.append(((this.topics == null)?"":this.topics)); - sb.append(','); - sb.append("additionalProperties"); - sb.append('='); - sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); - sb.append(','); - if (sb.charAt((sb.length()- 1)) == ',') { - sb.setCharAt((sb.length()- 1), ']'); - } else { - sb.append(']'); - } - return sb.toString(); - } - - @Override - public int hashCode() { - int result = 1; - result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); - result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); - result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); - result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); - result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); - result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); - result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); - return result; - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if ((other instanceof SamplePojo) == false) { - return false; - } - SamplePojo rhs = ((SamplePojo) other); - return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); - } - -} diff --git a/json-2/src/test/resources/json_optimization_mock_data.json b/json-2/src/test/resources/json_optimization_mock_data.json deleted file mode 100644 index e09517cf6199..000000000000 --- a/json-2/src/test/resources/json_optimization_mock_data.json +++ /dev/null @@ -1,1000 +0,0 @@ -[{"id":1,"firstName":"Horatius","lastName":"Strognell","street":"4848 New Castle Point","postalCode":"33432","city":"Boca Raton","state":"FL","phoneNumber":"561-824-9105","email":"hstrognell0@dailymail.co.uk"}, -{"id":2,"firstName":"Kerri","lastName":"Arend","street":"4 Welch Pass","postalCode":"60669","city":"Chicago","state":"IL","phoneNumber":"312-303-5993"}, -{"id":3,"firstName":"Silvano","lastName":"Bartholomaus","street":"2491 Arkansas Center","postalCode":"30195","city":"Duluth","state":"GA","email":"sbartholomaus2@prlog.org"}, -{"id":4,"firstName":"Venita","lastName":"Burgoine","street":"63894 Sage Park","postalCode":"67215","city":"Wichita","state":"KS","email":"vburgoine3@telegraph.co.uk"}, -{"id":5,"firstName":"Meghan","lastName":"Westover","street":"76 Pleasure Way","postalCode":"77388","city":"Spring","state":"TX","phoneNumber":"832-926-0689","email":"mwestover4@cnn.com"}, -{"id":6,"firstName":"Mia","lastName":"Baversor","street":"50 Sommers Road","postalCode":"43204","city":"Columbus","state":"OH","email":"mbaversor5@wsj.com"}, -{"id":7,"firstName":"Winna","lastName":"Buggy","street":"05 Jenna Street","postalCode":"68144","city":"Omaha","state":"NE","phoneNumber":"402-740-7818"}, -{"id":8,"firstName":"Antonin","lastName":"Autrie","street":"9 Fieldstone Terrace","postalCode":"85754","city":"Tucson","state":"AZ"}, -{"id":9,"firstName":"Maddi","lastName":"Ollerearnshaw","street":"061 Crowley Trail","postalCode":"48335","city":"Farmington","state":"MI","phoneNumber":"248-709-8128"}, -{"id":10,"firstName":"Fawnia","lastName":"Cristofaro","street":"92571 Kinsman Alley","postalCode":"77271","city":"Houston","state":"TX","email":"fcristofaro9@ox.ac.uk"}, -{"id":11,"firstName":"Zachariah","lastName":"Rouby","street":"2439 Hudson Circle","postalCode":"25313","city":"Charleston","state":"WV","phoneNumber":"304-587-5444"}, -{"id":12,"firstName":"Brier","lastName":"Benech","street":"3144 Sutteridge Place","postalCode":"20380","city":"Washington","state":"DC","phoneNumber":"202-740-8851","email":"bbenechb@zdnet.com"}, -{"id":13,"firstName":"Merry","lastName":"Leming","street":"419 Kropf Terrace","postalCode":"45440","city":"Dayton","state":"OH","email":"mlemingc@ow.ly"}, -{"id":14,"firstName":"Audrey","lastName":"Dilleston","street":"61 Melrose Trail","postalCode":"97306","city":"Salem","state":"OR","phoneNumber":"503-480-6254"}, -{"id":15,"firstName":"De witt","lastName":"Kedge","street":"819 Kingsford Point","postalCode":"84135","city":"Salt Lake City","state":"UT"}, -{"id":16,"firstName":"Charita","lastName":"de Clerc","street":"42 Loftsgordon Hill","postalCode":"28289","city":"Charlotte","state":"NC","phoneNumber":"704-532-8850","email":"cdeclercf@comsenz.com"}, -{"id":17,"firstName":"Edgard","lastName":"Bloore","street":"1659 Donald Trail","postalCode":"20051","city":"Washington","state":"DC"}, -{"id":18,"firstName":"Kristi","lastName":"Richichi","street":"11306 Longview Hill","postalCode":"75372","city":"Dallas","state":"TX","email":"krichichih@cloudflare.com"}, -{"id":19,"firstName":"Denna","lastName":"Cornford","street":"4 Gale Junction","postalCode":"10014","city":"New York City","state":"NY","phoneNumber":"646-273-3067","email":"dcornfordi@ebay.co.uk"}, -{"id":20,"firstName":"Randall","lastName":"McQuaid","street":"55712 Stone Corner Circle","postalCode":"10203","city":"New York City","state":"NY","email":"rmcquaidj@facebook.com"}, -{"id":21,"firstName":"Kirbie","lastName":"Walczak","street":"9 Coleman Road","postalCode":"99252","city":"Spokane","state":"WA","email":"kwalczakk@spotify.com"}, -{"id":22,"firstName":"Zedekiah","lastName":"Westby","street":"9 Victoria Road","postalCode":"22093","city":"Ashburn","state":"VA","phoneNumber":"571-642-0111","email":"zwestbyl@ox.ac.uk"}, -{"id":23,"firstName":"Corri","lastName":"Snar","street":"4 Service Terrace","postalCode":"68517","city":"Lincoln","state":"NE","email":"csnarm@tinyurl.com"}, -{"id":24,"firstName":"Manny","lastName":"Marchington","street":"942 Westend Center","postalCode":"22119","city":"Merrifield","state":"VA","email":"mmarchingtonn@opensource.org"}, -{"id":25,"firstName":"Ashla","lastName":"Grigoroni","street":"755 Lerdahl Parkway","postalCode":"55423","city":"Minneapolis","state":"MN","phoneNumber":"612-797-7928","email":"agrigoronio@cam.ac.uk"}, -{"id":26,"firstName":"Rita","lastName":"Sharratt","street":"710 Buena Vista Avenue","postalCode":"40576","city":"Lexington","state":"KY","phoneNumber":"859-727-0697"}, -{"id":27,"firstName":"Karrie","lastName":"Crathorne","street":"02 Loeprich Place","postalCode":"39505","city":"Gulfport","state":"MS"}, -{"id":28,"firstName":"Lothario","lastName":"Merck","street":"46 Golden Leaf Park","postalCode":"35205","city":"Birmingham","state":"AL"}, -{"id":29,"firstName":"Renault","lastName":"Banister","street":"7 Garrison Plaza","postalCode":"85072","city":"Phoenix","state":"AZ"}, -{"id":30,"firstName":"Wanda","lastName":"Burkart","street":"10 Mendota Place","postalCode":"48258","city":"Detroit","state":"MI","phoneNumber":"248-870-5185","email":"wburkartt@wikipedia.org"}, -{"id":31,"firstName":"Maggy","lastName":"Timby","street":"37 Crest Line Center","postalCode":"50305","city":"Des Moines","state":"IA","email":"mtimbyu@cnbc.com"}, -{"id":32,"firstName":"Chet","lastName":"Origan","street":"767 Bashford Lane","postalCode":"30919","city":"Augusta","state":"GA","email":"coriganv@behance.net"}, -{"id":33,"firstName":"Jammie","lastName":"Aslie","street":"7174 Hoffman Circle","postalCode":"23464","city":"Virginia Beach","state":"VA"}, -{"id":34,"firstName":"Dill","lastName":"Kingdon","street":"75 Corben Crossing","postalCode":"33013","city":"Hialeah","state":"FL","email":"dkingdonx@ibm.com"}, -{"id":35,"firstName":"Berenice","lastName":"Blodget","street":"8 Eliot Junction","postalCode":"93907","city":"Salinas","state":"CA","email":"bblodgety@blogs.com"}, -{"id":36,"firstName":"Kimberley","lastName":"Streatley","street":"56 Welch Center","postalCode":"77070","city":"Houston","state":"TX"}, -{"id":37,"firstName":"Warde","lastName":"Woodwind","street":"773 Gerald Park","postalCode":"35295","city":"Birmingham","state":"AL","email":"wwoodwind10@wsj.com"}, -{"id":38,"firstName":"Husain","lastName":"Christofe","street":"35118 Forest Dale Avenue","postalCode":"10175","city":"New York City","state":"NY","phoneNumber":"212-611-7995","email":"hchristofe11@seesaa.net"}, -{"id":39,"firstName":"Gertrud","lastName":"Defraine","street":"568 Walton Way","postalCode":"37405","city":"Chattanooga","state":"TN","phoneNumber":"423-125-5719","email":"gdefraine12@xrea.com"}, -{"id":40,"firstName":"Yulma","lastName":"Ramshay","street":"9976 Iowa Drive","postalCode":"87121","city":"Albuquerque","state":"NM","phoneNumber":"505-914-5281"}, -{"id":41,"firstName":"Bride","lastName":"Amsberger","street":"3 Service Lane","postalCode":"28272","city":"Charlotte","state":"NC","email":"bamsberger14@forbes.com"}, -{"id":42,"firstName":"Kaiser","lastName":"Froud","street":"7 Starling Lane","postalCode":"99507","city":"Anchorage","state":"AK","email":"kfroud15@cloudflare.com"}, -{"id":43,"firstName":"Leona","lastName":"Sciusscietto","street":"06392 East Lane","postalCode":"60193","city":"Schaumburg","state":"IL","phoneNumber":"630-981-3986","email":"lsciusscietto16@mit.edu"}, -{"id":44,"firstName":"Sibel","lastName":"Ripsher","street":"8672 Bayside Road","postalCode":"32511","city":"Pensacola","state":"FL","phoneNumber":"850-975-6365","email":"sripsher17@sitemeter.com"}, -{"id":45,"firstName":"Megen","lastName":"Dymond","street":"0547 Harper Place","postalCode":"28220","city":"Charlotte","state":"NC","phoneNumber":"704-632-5850"}, -{"id":46,"firstName":"Vitoria","lastName":"Niese","street":"365 Colorado Plaza","postalCode":"15279","city":"Pittsburgh","state":"PA","phoneNumber":"412-864-8563"}, -{"id":47,"firstName":"Cherianne","lastName":"Daveran","street":"5 Esch Parkway","postalCode":"36104","city":"Montgomery","state":"AL","email":"cdaveran1a@ft.com"}, -{"id":48,"firstName":"Harriott","lastName":"Mallam","street":"9 Monterey Place","postalCode":"20215","city":"Washington","state":"DC","phoneNumber":"202-727-0645"}, -{"id":49,"firstName":"Jozef","lastName":"Stranger","street":"07 Warner Drive","postalCode":"84199","city":"Salt Lake City","state":"UT","phoneNumber":"801-741-5946"}, -{"id":50,"firstName":"Teena","lastName":"Broggio","street":"287 Luster Park","postalCode":"78285","city":"San Antonio","state":"TX","phoneNumber":"210-482-0822","email":"tbroggio1d@craigslist.org"}, -{"id":51,"firstName":"Robin","lastName":"Membry","street":"0736 Forest Dale Crossing","postalCode":"45408","city":"Dayton","state":"OH","phoneNumber":"937-335-4964","email":"rmembry1e@toplist.cz"}, -{"id":52,"firstName":"Holly","lastName":"Lowcock","street":"819 Aberg Pass","postalCode":"28815","city":"Asheville","state":"NC","email":"hlowcock1f@bbc.co.uk"}, -{"id":53,"firstName":"Shandee","lastName":"Blowick","street":"81600 Moose Lane","postalCode":"46867","city":"Fort Wayne","state":"IN","phoneNumber":"260-904-5622"}, -{"id":54,"firstName":"Chaim","lastName":"Stilliard","street":"91 Spohn Court","postalCode":"28305","city":"Fayetteville","state":"NC","phoneNumber":"910-721-3938"}, -{"id":55,"firstName":"Maximilien","lastName":"Purkis","street":"66997 Algoma Park","postalCode":"10150","city":"New York City","state":"NY","phoneNumber":"212-824-3363","email":"mpurkis1i@unblog.fr"}, -{"id":56,"firstName":"Ferguson","lastName":"Whiles","street":"0550 Bowman Street","postalCode":"33142","city":"Miami","state":"FL","phoneNumber":"786-416-2947","email":"fwhiles1j@artisteer.com"}, -{"id":57,"firstName":"Elena","lastName":"Poyle","street":"54 Warner Court","postalCode":"28055","city":"Gastonia","state":"NC","email":"epoyle1k@tripod.com"}, -{"id":58,"firstName":"Carney","lastName":"Pengilly","street":"050 Welch Junction","postalCode":"76147","city":"Fort Worth","state":"TX","phoneNumber":"817-525-7801","email":"cpengilly1l@yellowpages.com"}, -{"id":59,"firstName":"Krispin","lastName":"Pouck","street":"03554 Twin Pines Point","postalCode":"55551","city":"Young America","state":"MN","email":"kpouck1m@nymag.com"}, -{"id":60,"firstName":"Kylie","lastName":"Osmar","street":"7 Milwaukee Plaza","postalCode":"45228","city":"Cincinnati","state":"OH","phoneNumber":"513-940-5020","email":"kosmar1n@storify.com"}, -{"id":61,"firstName":"Trudi","lastName":"Standrin","street":"526 Onsgard Park","postalCode":"12237","city":"Albany","state":"NY","email":"tstandrin1o@sfgate.com"}, -{"id":62,"firstName":"Frank","lastName":"Belt","street":"52 Stang Lane","postalCode":"27455","city":"Greensboro","state":"NC"}, -{"id":63,"firstName":"Nerita","lastName":"Daulton","street":"03 Sutherland Court","postalCode":"55417","city":"Minneapolis","state":"MN","phoneNumber":"651-796-2028"}, -{"id":64,"firstName":"Urbanus","lastName":"Camm","street":"6802 Weeping Birch Circle","postalCode":"92115","city":"San Diego","state":"CA","email":"ucamm1r@ucoz.com"}, -{"id":65,"firstName":"Perry","lastName":"Struther","street":"63916 Corry Alley","postalCode":"28805","city":"Asheville","state":"NC","phoneNumber":"828-821-0824","email":"pstruther1s@nih.gov"}, -{"id":66,"firstName":"Zorina","lastName":"Uc","street":"99 Merry Circle","postalCode":"37250","city":"Nashville","state":"TN","phoneNumber":"615-364-4726","email":"zuc1t@cbc.ca"}, -{"id":67,"firstName":"Ajay","lastName":"Rediers","street":"6872 Armistice Lane","postalCode":"92812","city":"Anaheim","state":"CA","phoneNumber":"714-845-0143"}, -{"id":68,"firstName":"Brendis","lastName":"Goor","street":"94 Mccormick Place","postalCode":"77346","city":"Humble","state":"TX","phoneNumber":"713-910-5956"}, -{"id":69,"firstName":"Barbey","lastName":"Konneke","street":"75613 Miller Trail","postalCode":"30328","city":"Atlanta","state":"GA","phoneNumber":"770-208-1453"}, -{"id":70,"firstName":"Adlai","lastName":"Colly","street":"4446 Loftsgordon Place","postalCode":"40576","city":"Lexington","state":"KY","email":"acolly1x@phpbb.com"}, -{"id":71,"firstName":"Libby","lastName":"Wherton","street":"9313 Buell Road","postalCode":"70116","city":"New Orleans","state":"LA","email":"lwherton1y@flickr.com"}, -{"id":72,"firstName":"Niko","lastName":"Stockell","street":"61 Havey Park","postalCode":"10034","city":"New York City","state":"NY","phoneNumber":"646-814-6395","email":"nstockell1z@xrea.com"}, -{"id":73,"firstName":"Phillip","lastName":"Dadley","street":"14534 Victoria Street","postalCode":"33906","city":"Fort Myers","state":"FL","email":"pdadley20@studiopress.com"}, -{"id":74,"firstName":"Leann","lastName":"Hebburn","street":"9 Center Place","postalCode":"84140","city":"Salt Lake City","state":"UT","email":"lhebburn21@1688.com"}, -{"id":75,"firstName":"Raynor","lastName":"Gernier","street":"5923 Gale Plaza","postalCode":"79118","city":"Amarillo","state":"TX"}, -{"id":76,"firstName":"Elmore","lastName":"Frankton","street":"770 Wayridge Crossing","postalCode":"14619","city":"Rochester","state":"NY"}, -{"id":77,"firstName":"Teresina","lastName":"Rives","street":"51261 Sycamore Terrace","postalCode":"63180","city":"Saint Louis","state":"MO","email":"trives24@cbsnews.com"}, -{"id":78,"firstName":"Pancho","lastName":"Thebeaud","street":"72 Pierstorff Way","postalCode":"33705","city":"Saint Petersburg","state":"FL","phoneNumber":"813-335-3556"}, -{"id":79,"firstName":"Deanne","lastName":"Crighton","street":"95 Duke Plaza","postalCode":"71151","city":"Shreveport","state":"LA","phoneNumber":"318-218-7196","email":"dcrighton26@sphinn.com"}, -{"id":80,"firstName":"Brucie","lastName":"Bury","street":"8948 Knutson Lane","postalCode":"93740","city":"Fresno","state":"CA","email":"bbury27@twitter.com"}, -{"id":81,"firstName":"Joleen","lastName":"Flack","street":"8007 Morningstar Street","postalCode":"33283","city":"Miami","state":"FL","phoneNumber":"305-459-0365"}, -{"id":82,"firstName":"Antonino","lastName":"Matelyunas","street":"2585 Gale Road","postalCode":"20591","city":"Washington","state":"DC","phoneNumber":"202-780-3589"}, -{"id":83,"firstName":"Vinnie","lastName":"Syne","street":"6 Fallview Pass","postalCode":"20231","city":"Washington","state":"DC","phoneNumber":"202-648-5977","email":"vsyne2a@etsy.com"}, -{"id":84,"firstName":"Sig","lastName":"Guillotin","street":"6 Buell Lane","postalCode":"46015","city":"Anderson","state":"IN","phoneNumber":"765-948-7663","email":"sguillotin2b@cisco.com"}, -{"id":85,"firstName":"Gabriel","lastName":"Vasyukhichev","street":"25801 Grasskamp Junction","postalCode":"45408","city":"Dayton","state":"OH","email":"gvasyukhichev2c@mac.com"}, -{"id":86,"firstName":"Casie","lastName":"Burgill","street":"0 Dapin Alley","postalCode":"37410","city":"Chattanooga","state":"TN"}, -{"id":87,"firstName":"Kristan","lastName":"Chalice","street":"5118 Calypso Junction","postalCode":"78721","city":"Austin","state":"TX","phoneNumber":"512-831-2347"}, -{"id":88,"firstName":"Brear","lastName":"Pruckner","street":"2 Corscot Street","postalCode":"53790","city":"Madison","state":"WI"}, -{"id":89,"firstName":"Estella","lastName":"Orpyne","street":"293 Hansons Plaza","postalCode":"55579","city":"Maple Plain","state":"MN","phoneNumber":"952-666-6951","email":"eorpyne2g@examiner.com"}, -{"id":90,"firstName":"Conroy","lastName":"de Banke","street":"40636 Farmco Park","postalCode":"30316","city":"Atlanta","state":"GA","phoneNumber":"404-199-0073","email":"cdebanke2h@prweb.com"}, -{"id":91,"firstName":"Elmira","lastName":"Bracken","street":"10 Macpherson Place","postalCode":"85099","city":"Phoenix","state":"AZ","phoneNumber":"602-991-7768","email":"ebracken2i@sourceforge.net"}, -{"id":92,"firstName":"Carlota","lastName":"Vasilechko","street":"33 American Ash Point","postalCode":"75507","city":"Texarkana","state":"TX","phoneNumber":"903-312-0610","email":"cvasilechko2j@nba.com"}, -{"id":93,"firstName":"Jamesy","lastName":"Valentelli","street":"59634 Charing Cross Trail","postalCode":"31416","city":"Savannah","state":"GA","phoneNumber":"912-657-6729","email":"jvalentelli2k@nifty.com"}, -{"id":94,"firstName":"Hildagarde","lastName":"Sandels","street":"1 Lotheville Lane","postalCode":"32277","city":"Jacksonville","state":"FL","phoneNumber":"904-981-2753","email":"hsandels2l@a8.net"}, -{"id":95,"firstName":"Kip","lastName":"Cranidge","street":"2 South Road","postalCode":"19160","city":"Philadelphia","state":"PA"}, -{"id":96,"firstName":"Tobit","lastName":"Jarrette","street":"777 Mallard Trail","postalCode":"49444","city":"Muskegon","state":"MI","phoneNumber":"231-706-1988"}, -{"id":97,"firstName":"Tibold","lastName":"Michie","street":"87796 Nevada Junction","postalCode":"22093","city":"Ashburn","state":"VA","phoneNumber":"571-188-4893","email":"tmichie2o@mapy.cz"}, -{"id":98,"firstName":"Maximo","lastName":"Ifill","street":"8307 Tony Point","postalCode":"22225","city":"Arlington","state":"VA","phoneNumber":"571-404-1412"}, -{"id":99,"firstName":"Patti","lastName":"Autry","street":"901 Iowa Crossing","postalCode":"55551","city":"Young America","state":"MN","phoneNumber":"952-772-9107","email":"pautry2q@scientificamerican.com"}, -{"id":100,"firstName":"Cathe","lastName":"Jost","street":"4400 Menomonie Road","postalCode":"21211","city":"Baltimore","state":"MD","phoneNumber":"410-800-4683","email":"cjost2r@tuttocitta.it"}, -{"id":101,"firstName":"Byron","lastName":"Maddams","street":"10729 Oak Trail","postalCode":"78255","city":"San Antonio","state":"TX","phoneNumber":"830-263-4129"}, -{"id":102,"firstName":"Sosanna","lastName":"Paley","street":"82207 Park Meadow Court","postalCode":"77010","city":"Houston","state":"TX","phoneNumber":"832-740-8766","email":"spaley2t@salon.com"}, -{"id":103,"firstName":"Elysia","lastName":"Skerratt","street":"88708 Cambridge Drive","postalCode":"31217","city":"Macon","state":"GA","phoneNumber":"478-265-6579","email":"eskerratt2u@japanpost.jp"}, -{"id":104,"firstName":"Nealson","lastName":"Sieur","street":"1286 Elmside Plaza","postalCode":"20904","city":"Silver Spring","state":"MD"}, -{"id":105,"firstName":"Yasmeen","lastName":"Bazire","street":"91904 Elmside Point","postalCode":"73167","city":"Oklahoma City","state":"OK"}, -{"id":106,"firstName":"Mandy","lastName":"Ewart","street":"91 Norway Maple Street","postalCode":"21239","city":"Baltimore","state":"MD","email":"mewart2x@weebly.com"}, -{"id":107,"firstName":"Chlo","lastName":"Keedy","street":"560 Oak Valley Avenue","postalCode":"20420","city":"Washington","state":"DC"}, -{"id":108,"firstName":"Benedicta","lastName":"Dinneen","street":"9 Cottonwood Circle","postalCode":"60686","city":"Chicago","state":"IL","email":"bdinneen2z@nydailynews.com"}, -{"id":109,"firstName":"Nanon","lastName":"Corsar","street":"40001 Barby Drive","postalCode":"95818","city":"Sacramento","state":"CA","email":"ncorsar30@house.gov"}, -{"id":110,"firstName":"Babette","lastName":"Scarsbrick","street":"96095 Loomis Terrace","postalCode":"94622","city":"Oakland","state":"CA","email":"bscarsbrick31@smugmug.com"}, -{"id":111,"firstName":"Cornall","lastName":"Christauffour","street":"9 Springview Alley","postalCode":"84170","city":"Salt Lake City","state":"UT","phoneNumber":"801-935-1246","email":"cchristauffour32@booking.com"}, -{"id":112,"firstName":"Micki","lastName":"Labell","street":"77729 Heath Place","postalCode":"25336","city":"Charleston","state":"WV"}, -{"id":113,"firstName":"Marissa","lastName":"Bricksey","street":"1 Jackson Pass","postalCode":"11470","city":"Jamaica","state":"NY","phoneNumber":"917-552-4280"}, -{"id":114,"firstName":"Alex","lastName":"Lyptrade","street":"74 Bunting Circle","postalCode":"40591","city":"Lexington","state":"KY","phoneNumber":"859-177-0753"}, -{"id":115,"firstName":"Tove","lastName":"Bielfeldt","street":"95 Mallard Hill","postalCode":"70894","city":"Baton Rouge","state":"LA","email":"tbielfeldt36@goo.gl"}, -{"id":116,"firstName":"Rodrigo","lastName":"Chestle","street":"53625 1st Junction","postalCode":"43635","city":"Toledo","state":"OH","phoneNumber":"419-928-0953","email":"rchestle37@princeton.edu"}, -{"id":117,"firstName":"Ulrike","lastName":"Kendle","street":"0 Cardinal Alley","postalCode":"80925","city":"Colorado Springs","state":"CO","phoneNumber":"719-796-1992","email":"ukendle38@naver.com"}, -{"id":118,"firstName":"Sandor","lastName":"Warwick","street":"8 Spaight Crossing","postalCode":"92030","city":"Escondido","state":"CA","email":"swarwick39@about.com"}, -{"id":119,"firstName":"Selina","lastName":"Slowcock","street":"7 7th Circle","postalCode":"50335","city":"Des Moines","state":"IA","phoneNumber":"515-865-9809"}, -{"id":120,"firstName":"Maxine","lastName":"Placstone","street":"42056 Sycamore Plaza","postalCode":"20244","city":"Washington","state":"DC"}, -{"id":121,"firstName":"Ardine","lastName":"Reven","street":"10634 Nancy Way","postalCode":"10175","city":"New York City","state":"NY","email":"areven3c@diigo.com"}, -{"id":122,"firstName":"Dilan","lastName":"Widdows","street":"37 Park Meadow Way","postalCode":"68144","city":"Omaha","state":"NE","phoneNumber":"402-383-9020"}, -{"id":123,"firstName":"Kevina","lastName":"Praten","street":"8531 Elmside Point","postalCode":"27610","city":"Raleigh","state":"NC","email":"kpraten3e@craigslist.org"}, -{"id":124,"firstName":"Sherman","lastName":"Jurczak","street":"8281 Acker Alley","postalCode":"07522","city":"Paterson","state":"NJ","email":"sjurczak3f@github.com"}, -{"id":125,"firstName":"Beckie","lastName":"Disney","street":"3 Butterfield Drive","postalCode":"49518","city":"Grand Rapids","state":"MI","phoneNumber":"616-493-1284","email":"bdisney3g@china.com.cn"}, -{"id":126,"firstName":"Blaine","lastName":"Leak","street":"369 Norway Maple Lane","postalCode":"03804","city":"Portsmouth","state":"NH","email":"bleak3h@lulu.com"}, -{"id":127,"firstName":"Dare","lastName":"Marney","street":"50 Lake View Alley","postalCode":"06505","city":"New Haven","state":"CT","phoneNumber":"203-876-6938","email":"dmarney3i@delicious.com"}, -{"id":128,"firstName":"Darby","lastName":"Sackler","street":"841 Ridgeview Trail","postalCode":"80279","city":"Denver","state":"CO"}, -{"id":129,"firstName":"Aurilia","lastName":"Seabrocke","street":"670 Schmedeman Road","postalCode":"11254","city":"Brooklyn","state":"NY","email":"aseabrocke3k@engadget.com"}, -{"id":130,"firstName":"Griz","lastName":"Riccioppo","street":"2204 Moland Circle","postalCode":"45218","city":"Cincinnati","state":"OH","email":"griccioppo3l@cisco.com"}, -{"id":131,"firstName":"Zahara","lastName":"Quinion","street":"4979 Mallory Circle","postalCode":"24515","city":"Lynchburg","state":"VA","email":"zquinion3m@sfgate.com"}, -{"id":132,"firstName":"Holly-anne","lastName":"Fontel","street":"60752 Hallows Circle","postalCode":"76705","city":"Waco","state":"TX","phoneNumber":"254-822-2565","email":"hfontel3n@exblog.jp"}, -{"id":133,"firstName":"Johannes","lastName":"Lemonby","street":"3 Grover Terrace","postalCode":"25709","city":"Huntington","state":"WV","phoneNumber":"304-342-4911","email":"jlemonby3o@woothemes.com"}, -{"id":134,"firstName":"Melvin","lastName":"Kain","street":"16 Pond Junction","postalCode":"85215","city":"Mesa","state":"AZ","phoneNumber":"602-146-3701"}, -{"id":135,"firstName":"Letta","lastName":"Smelley","street":"537 Helena Circle","postalCode":"22119","city":"Merrifield","state":"VA","phoneNumber":"571-472-5640"}, -{"id":136,"firstName":"Clerc","lastName":"Mc Ilwrick","street":"7050 Northfield Street","postalCode":"90050","city":"Los Angeles","state":"CA","email":"cmcilwrick3r@abc.net.au"}, -{"id":137,"firstName":"Abba","lastName":"Sutherns","street":"8087 Monterey Lane","postalCode":"83757","city":"Boise","state":"ID","phoneNumber":"208-110-3153","email":"asutherns3s@dropbox.com"}, -{"id":138,"firstName":"Karola","lastName":"Symper","street":"4596 Clyde Gallagher Road","postalCode":"28815","city":"Asheville","state":"NC","email":"ksymper3t@parallels.com"}, -{"id":139,"firstName":"Jessamyn","lastName":"Deacock","street":"19557 Bobwhite Way","postalCode":"19725","city":"Newark","state":"DE","phoneNumber":"302-174-2938"}, -{"id":140,"firstName":"Iggy","lastName":"Impey","street":"8 Brown Place","postalCode":"27499","city":"Greensboro","state":"NC"}, -{"id":141,"firstName":"Kary","lastName":"Mably","street":"75 Porter Avenue","postalCode":"70174","city":"New Orleans","state":"LA","email":"kmably3w@miibeian.gov.cn"}, -{"id":142,"firstName":"Ciel","lastName":"Tidbold","street":"54 Mitchell Lane","postalCode":"90055","city":"Los Angeles","state":"CA"}, -{"id":143,"firstName":"Dyana","lastName":"Orcott","street":"2 Kinsman Street","postalCode":"90005","city":"Los Angeles","state":"CA","phoneNumber":"310-366-6987"}, -{"id":144,"firstName":"Damien","lastName":"Haking","street":"2 Elmside Point","postalCode":"62705","city":"Springfield","state":"IL","email":"dhaking3z@drupal.org"}, -{"id":145,"firstName":"Ricardo","lastName":"Bille","street":"3 Mesta Hill","postalCode":"98411","city":"Tacoma","state":"WA","email":"rbille40@ebay.co.uk"}, -{"id":146,"firstName":"Carlene","lastName":"Roget","street":"8 Granby Avenue","postalCode":"35225","city":"Birmingham","state":"AL","phoneNumber":"205-762-4907","email":"croget41@statcounter.com"}, -{"id":147,"firstName":"Sharlene","lastName":"Antusch","street":"02445 Stang Parkway","postalCode":"55480","city":"Minneapolis","state":"MN","email":"santusch42@mtv.com"}, -{"id":148,"firstName":"Goober","lastName":"Danielczyk","street":"474 Union Court","postalCode":"70505","city":"Lafayette","state":"LA","phoneNumber":"337-779-0312","email":"gdanielczyk43@dion.ne.jp"}, -{"id":149,"firstName":"Janette","lastName":"Mauro","street":"1231 Commercial Crossing","postalCode":"97201","city":"Portland","state":"OR","phoneNumber":"971-423-7259"}, -{"id":150,"firstName":"Melinda","lastName":"Shitliffe","street":"244 Derek Drive","postalCode":"23208","city":"Richmond","state":"VA","phoneNumber":"804-864-5845"}, -{"id":151,"firstName":"Constance","lastName":"Fardon","street":"3 Lien Point","postalCode":"89105","city":"Las Vegas","state":"NV"}, -{"id":152,"firstName":"Tedd","lastName":"Storey","street":"2551 Luster Point","postalCode":"19151","city":"Philadelphia","state":"PA","phoneNumber":"215-622-9273","email":"tstorey47@google.com.au"}, -{"id":153,"firstName":"Brigitte","lastName":"Slograve","street":"8130 Waubesa Hill","postalCode":"11499","city":"Jamaica","state":"NY","email":"bslograve48@yandex.ru"}, -{"id":154,"firstName":"Ralph","lastName":"Comberbeach","street":"88140 Anderson Avenue","postalCode":"90076","city":"Los Angeles","state":"CA"}, -{"id":155,"firstName":"Deloria","lastName":"Thomazet","street":"666 Center Crossing","postalCode":"38119","city":"Memphis","state":"TN","phoneNumber":"615-840-7916"}, -{"id":156,"firstName":"Fidel","lastName":"MacClay","street":"01 Fairfield Point","postalCode":"24034","city":"Roanoke","state":"VA","email":"fmacclay4b@sitemeter.com"}, -{"id":157,"firstName":"Amalee","lastName":"Menzies","street":"6 Judy Drive","postalCode":"84605","city":"Provo","state":"UT"}, -{"id":158,"firstName":"Ansel","lastName":"Jory","street":"3 Nobel Park","postalCode":"32505","city":"Pensacola","state":"FL","phoneNumber":"850-394-8201"}, -{"id":159,"firstName":"Teodor","lastName":"Longhorn","street":"563 Sutherland Avenue","postalCode":"98008","city":"Bellevue","state":"WA"}, -{"id":160,"firstName":"Margarita","lastName":"Rewcassell","street":"64711 Beilfuss Point","postalCode":"79764","city":"Odessa","state":"TX","phoneNumber":"432-413-2196"}, -{"id":161,"firstName":"Tarra","lastName":"Albro","street":"2 Graceland Way","postalCode":"78405","city":"Corpus Christi","state":"TX"}, -{"id":162,"firstName":"Whitaker","lastName":"Brizell","street":"6 Luster Place","postalCode":"33694","city":"Tampa","state":"FL","email":"wbrizell4h@naver.com"}, -{"id":163,"firstName":"Gauthier","lastName":"Getsham","street":"0820 Duke Plaza","postalCode":"28263","city":"Charlotte","state":"NC","phoneNumber":"704-510-2908"}, -{"id":164,"firstName":"Thane","lastName":"Discombe","street":"56809 Aberg Street","postalCode":"63167","city":"Saint Louis","state":"MO"}, -{"id":165,"firstName":"Felicia","lastName":"Barthrup","street":"904 Stuart Junction","postalCode":"32220","city":"Jacksonville","state":"FL"}, -{"id":166,"firstName":"Emeline","lastName":"Jobes","street":"2670 Prairieview Plaza","postalCode":"10120","city":"New York City","state":"NY","email":"ejobes4l@newyorker.com"}, -{"id":167,"firstName":"Felicle","lastName":"Bowie","street":"9715 Lighthouse Bay Parkway","postalCode":"11210","city":"Brooklyn","state":"NY","email":"fbowie4m@auda.org.au"}, -{"id":168,"firstName":"Clare","lastName":"Miskelly","street":"8 Towne Trail","postalCode":"44555","city":"Youngstown","state":"OH"}, -{"id":169,"firstName":"Mort","lastName":"Danat","street":"6833 Shoshone Lane","postalCode":"12255","city":"Albany","state":"NY","phoneNumber":"518-967-9791","email":"mdanat4o@privacy.gov.au"}, -{"id":170,"firstName":"Ailey","lastName":"Scatchar","street":"3 Northfield Point","postalCode":"76505","city":"Temple","state":"TX"}, -{"id":171,"firstName":"Kevina","lastName":"Darwent","street":"8165 Reinke Alley","postalCode":"94132","city":"San Francisco","state":"CA","email":"kdarwent4q@artisteer.com"}, -{"id":172,"firstName":"My","lastName":"Buston","street":"715 Saint Paul Center","postalCode":"31416","city":"Savannah","state":"GA","phoneNumber":"912-281-8654"}, -{"id":173,"firstName":"Emera","lastName":"Lingner","street":"943 Eastlawn Hill","postalCode":"90605","city":"Whittier","state":"CA"}, -{"id":174,"firstName":"Drucie","lastName":"Byer","street":"988 4th Court","postalCode":"06816","city":"Danbury","state":"CT","email":"dbyer4t@xinhuanet.com"}, -{"id":175,"firstName":"Modestine","lastName":"Madeley","street":"1 Delaware Terrace","postalCode":"80126","city":"Littleton","state":"CO"}, -{"id":176,"firstName":"Selie","lastName":"O'Mohun","street":"42 Monument Trail","postalCode":"55590","city":"Monticello","state":"MN","phoneNumber":"763-384-5166"}, -{"id":177,"firstName":"Shayla","lastName":"Pesselt","street":"7 Pawling Center","postalCode":"20099","city":"Washington","state":"DC","phoneNumber":"202-816-7300","email":"spesselt4w@posterous.com"}, -{"id":178,"firstName":"Raeann","lastName":"Layland","street":"06548 Longview Alley","postalCode":"77005","city":"Houston","state":"TX","phoneNumber":"214-899-1257","email":"rlayland4x@pcworld.com"}, -{"id":179,"firstName":"Dael","lastName":"Christaeas","street":"375 Northfield Street","postalCode":"23509","city":"Norfolk","state":"VA","phoneNumber":"757-391-2798","email":"dchristaeas4y@sciencedaily.com"}, -{"id":180,"firstName":"Nicolas","lastName":"Baxill","street":"9 Autumn Leaf Terrace","postalCode":"77005","city":"Houston","state":"TX","email":"nbaxill4z@edublogs.org"}, -{"id":181,"firstName":"Onida","lastName":"Pengilly","street":"61 Commercial Junction","postalCode":"24029","city":"Roanoke","state":"VA","email":"opengilly50@slideshare.net"}, -{"id":182,"firstName":"Muffin","lastName":"Thrasher","street":"1 Morning Hill","postalCode":"64082","city":"Lees Summit","state":"MO"}, -{"id":183,"firstName":"Ignaz","lastName":"McLugish","street":"3936 Columbus Point","postalCode":"35263","city":"Birmingham","state":"AL"}, -{"id":184,"firstName":"Guillaume","lastName":"Gillings","street":"75541 Sheridan Center","postalCode":"68510","city":"Lincoln","state":"NE","email":"ggillings53@unblog.fr"}, -{"id":185,"firstName":"Kalli","lastName":"Branche","street":"33740 Manitowish Court","postalCode":"96805","city":"Honolulu","state":"HI"}, -{"id":186,"firstName":"Winthrop","lastName":"Barszczewski","street":"9 Luster Terrace","postalCode":"60158","city":"Carol Stream","state":"IL","phoneNumber":"309-633-3125","email":"wbarszczewski55@eventbrite.com"}, -{"id":187,"firstName":"Renaud","lastName":"Nitto","street":"1 Crownhardt Place","postalCode":"10310","city":"Staten Island","state":"NY","phoneNumber":"914-568-4524","email":"rnitto56@typepad.com"}, -{"id":188,"firstName":"Pollyanna","lastName":"Wherrett","street":"31380 Upham Street","postalCode":"76134","city":"Fort Worth","state":"TX","phoneNumber":"817-198-3301","email":"pwherrett57@bluehost.com"}, -{"id":189,"firstName":"Lilly","lastName":"Gatchell","street":"7 Elka Road","postalCode":"94064","city":"Redwood City","state":"CA","email":"lgatchell58@patch.com"}, -{"id":190,"firstName":"Leopold","lastName":"Leavey","street":"9 Darwin Crossing","postalCode":"20268","city":"Washington","state":"DC","phoneNumber":"202-964-5932","email":"lleavey59@aol.com"}, -{"id":191,"firstName":"Byram","lastName":"Stuckes","street":"782 Northport Alley","postalCode":"55436","city":"Minneapolis","state":"MN"}, -{"id":192,"firstName":"Cull","lastName":"Whiterod","street":"2586 Banding Terrace","postalCode":"80249","city":"Denver","state":"CO","email":"cwhiterod5b@skype.com"}, -{"id":193,"firstName":"Gretel","lastName":"Tacey","street":"6382 Fremont Avenue","postalCode":"25305","city":"Charleston","state":"WV"}, -{"id":194,"firstName":"Tudor","lastName":"Piff","street":"0 Monterey Circle","postalCode":"00214","city":"Portsmouth","state":"NH","email":"tpiff5d@eepurl.com"}, -{"id":195,"firstName":"Julienne","lastName":"Adshed","street":"91839 Lawn Avenue","postalCode":"92519","city":"Riverside","state":"CA"}, -{"id":196,"firstName":"Arnold","lastName":"Fearns","street":"7 West Trail","postalCode":"35242","city":"Birmingham","state":"AL","email":"afearns5f@bravesites.com"}, -{"id":197,"firstName":"Dunc","lastName":"Khoter","street":"048 Clove Lane","postalCode":"89505","city":"Reno","state":"NV","phoneNumber":"775-120-9532","email":"dkhoter5g@bbb.org"}, -{"id":198,"firstName":"Stevana","lastName":"Lush","street":"6 Dovetail Plaza","postalCode":"79945","city":"El Paso","state":"TX","email":"slush5h@economist.com"}, -{"id":199,"firstName":"Iggy","lastName":"Verryan","street":"5 Sommers Road","postalCode":"34114","city":"Naples","state":"FL","phoneNumber":"239-205-8767"}, -{"id":200,"firstName":"Breena","lastName":"Rubbert","street":"5 Kensington Crossing","postalCode":"90510","city":"Torrance","state":"CA","email":"brubbert5j@phpbb.com"}, -{"id":201,"firstName":"Jervis","lastName":"Doree","street":"2947 Center Plaza","postalCode":"70160","city":"New Orleans","state":"LA","phoneNumber":"504-278-7497","email":"jdoree5k@shutterfly.com"}, -{"id":202,"firstName":"Odelia","lastName":"Lidierth","street":"36699 Aberg Park","postalCode":"62764","city":"Springfield","state":"IL"}, -{"id":203,"firstName":"Ree","lastName":"Lammerding","street":"3542 Lerdahl Court","postalCode":"88558","city":"El Paso","state":"TX","phoneNumber":"915-384-9334","email":"rlammerding5m@msu.edu"}, -{"id":204,"firstName":"Davy","lastName":"Orniz","street":"49 Graedel Parkway","postalCode":"48295","city":"Detroit","state":"MI","email":"dorniz5n@examiner.com"}, -{"id":205,"firstName":"Syd","lastName":"Buckoke","street":"70 Pepper Wood Alley","postalCode":"74156","city":"Tulsa","state":"OK","phoneNumber":"918-604-5799"}, -{"id":206,"firstName":"Ginger","lastName":"Calkin","street":"7 Thompson Trail","postalCode":"71115","city":"Shreveport","state":"LA","phoneNumber":"318-650-6046"}, -{"id":207,"firstName":"Anissa","lastName":"Ivashinnikov","street":"61905 Chive Circle","postalCode":"40745","city":"London","state":"KY","email":"aivashinnikov5q@google.cn"}, -{"id":208,"firstName":"Vikky","lastName":"Kesley","street":"1 Grayhawk Street","postalCode":"06538","city":"New Haven","state":"CT","phoneNumber":"203-944-7163"}, -{"id":209,"firstName":"Alisha","lastName":"Lampke","street":"26940 Kensington Park","postalCode":"55446","city":"Minneapolis","state":"MN","phoneNumber":"612-814-9814","email":"alampke5s@apple.com"}, -{"id":210,"firstName":"Davidde","lastName":"Phlipon","street":"2044 Ruskin Road","postalCode":"07188","city":"Newark","state":"NJ","email":"dphlipon5t@shareasale.com"}, -{"id":211,"firstName":"Joly","lastName":"Crottagh","street":"532 Dawn Plaza","postalCode":"85083","city":"Phoenix","state":"AZ","phoneNumber":"602-533-4064"}, -{"id":212,"firstName":"Aggie","lastName":"Niesing","street":"3 Tony Drive","postalCode":"57110","city":"Sioux Falls","state":"SD","email":"aniesing5v@pbs.org"}, -{"id":213,"firstName":"Daron","lastName":"Baudassi","street":"2411 Melvin Court","postalCode":"40581","city":"Lexington","state":"KY","phoneNumber":"859-754-2542","email":"dbaudassi5w@joomla.org"}, -{"id":214,"firstName":"Thadeus","lastName":"Kleiser","street":"1394 Warner Street","postalCode":"87592","city":"Santa Fe","state":"NM","email":"tkleiser5x@bloomberg.com"}, -{"id":215,"firstName":"Terri","lastName":"Perrat","street":"0080 Upham Plaza","postalCode":"52245","city":"Iowa City","state":"IA"}, -{"id":216,"firstName":"Marlena","lastName":"Gatchell","street":"60888 Annamark Street","postalCode":"90060","city":"Los Angeles","state":"CA","phoneNumber":"323-121-6985","email":"mgatchell5z@ibm.com"}, -{"id":217,"firstName":"Locke","lastName":"Orcott","street":"459 Warner Lane","postalCode":"45020","city":"Hamilton","state":"OH","phoneNumber":"937-115-3187"}, -{"id":218,"firstName":"Wilmer","lastName":"Bewick","street":"0 Ohio Center","postalCode":"98166","city":"Seattle","state":"WA","phoneNumber":"253-805-8855","email":"wbewick61@seesaa.net"}, -{"id":219,"firstName":"Marena","lastName":"MacShirrie","street":"607 Badeau Circle","postalCode":"98008","city":"Bellevue","state":"WA","email":"mmacshirrie62@wikia.com"}, -{"id":220,"firstName":"Nathanial","lastName":"Sexty","street":"43 Basil Place","postalCode":"85020","city":"Phoenix","state":"AZ"}, -{"id":221,"firstName":"Wadsworth","lastName":"Iacovuzzi","street":"9610 Donald Crossing","postalCode":"88530","city":"El Paso","state":"TX","phoneNumber":"915-889-7936","email":"wiacovuzzi64@prnewswire.com"}, -{"id":222,"firstName":"Sutton","lastName":"Stych","street":"9 Brentwood Terrace","postalCode":"20546","city":"Washington","state":"DC","phoneNumber":"202-538-6355","email":"sstych65@wikimedia.org"}, -{"id":223,"firstName":"Gaspar","lastName":"Wabey","street":"3061 Bluejay Terrace","postalCode":"10110","city":"New York City","state":"NY","phoneNumber":"917-939-0802","email":"gwabey66@technorati.com"}, -{"id":224,"firstName":"Herminia","lastName":"Guyot","street":"91 Express Drive","postalCode":"85715","city":"Tucson","state":"AZ","phoneNumber":"520-777-1670","email":"hguyot67@admin.ch"}, -{"id":225,"firstName":"Udale","lastName":"Beurich","street":"675 Karstens Crossing","postalCode":"46852","city":"Fort Wayne","state":"IN","phoneNumber":"260-580-8627","email":"ubeurich68@bigcartel.com"}, -{"id":226,"firstName":"Kerrie","lastName":"Girauld","street":"56132 Charing Cross Court","postalCode":"71137","city":"Shreveport","state":"LA","email":"kgirauld69@nationalgeographic.com"}, -{"id":227,"firstName":"Irvin","lastName":"Nix","street":"0676 Aberg Terrace","postalCode":"97075","city":"Beaverton","state":"OR","email":"inix6a@xing.com"}, -{"id":228,"firstName":"Corene","lastName":"Spencock","street":"90 Meadow Ridge Drive","postalCode":"73173","city":"Oklahoma City","state":"OK","phoneNumber":"405-577-1312","email":"cspencock6b@shinystat.com"}, -{"id":229,"firstName":"Christos","lastName":"McIlreavy","street":"673 Jana Trail","postalCode":"23471","city":"Virginia Beach","state":"VA","email":"cmcilreavy6c@mayoclinic.com"}, -{"id":230,"firstName":"Bennett","lastName":"Melding","street":"4 Cardinal Lane","postalCode":"55448","city":"Minneapolis","state":"MN","email":"bmelding6d@t-online.de"}, -{"id":231,"firstName":"Winny","lastName":"de Leon","street":"941 Scoville Place","postalCode":"94611","city":"Oakland","state":"CA","phoneNumber":"510-230-4168","email":"wdeleon6e@dell.com"}, -{"id":232,"firstName":"Nike","lastName":"Iacobassi","street":"956 Service Junction","postalCode":"71914","city":"Hot Springs National Park","state":"AR","phoneNumber":"501-266-4142"}, -{"id":233,"firstName":"Gillan","lastName":"Baumann","street":"11 8th Alley","postalCode":"31190","city":"Atlanta","state":"GA","phoneNumber":"404-703-5154","email":"gbaumann6g@edublogs.org"}, -{"id":234,"firstName":"Brandtr","lastName":"Gadman","street":"5 Marquette Hill","postalCode":"32511","city":"Pensacola","state":"FL","phoneNumber":"850-834-0058","email":"bgadman6h@marriott.com"}, -{"id":235,"firstName":"Kenn","lastName":"Cage","street":"3759 Spohn Point","postalCode":"94126","city":"San Francisco","state":"CA","email":"kcage6i@earthlink.net"}, -{"id":236,"firstName":"Butch","lastName":"Causby","street":"02 Basil Crossing","postalCode":"10110","city":"New York City","state":"NY","phoneNumber":"212-190-1702","email":"bcausby6j@scribd.com"}, -{"id":237,"firstName":"Haleigh","lastName":"Parsonson","street":"8 Ruskin Trail","postalCode":"87201","city":"Albuquerque","state":"NM","phoneNumber":"505-987-1352"}, -{"id":238,"firstName":"Bartel","lastName":"Ruppeli","street":"7538 Red Cloud Center","postalCode":"37410","city":"Chattanooga","state":"TN","phoneNumber":"423-804-1016","email":"bruppeli6l@etsy.com"}, -{"id":239,"firstName":"Gretchen","lastName":"Le feaver","street":"7 Orin Way","postalCode":"98042","city":"Kent","state":"WA","phoneNumber":"253-205-3092","email":"glefeaver6m@mayoclinic.com"}, -{"id":240,"firstName":"Trumaine","lastName":"Dearden","street":"1 Vernon Trail","postalCode":"06127","city":"West Hartford","state":"CT","phoneNumber":"860-939-3865","email":"tdearden6n@goo.gl"}, -{"id":241,"firstName":"Aggie","lastName":"Dubs","street":"3601 Walton Trail","postalCode":"62764","city":"Springfield","state":"IL","phoneNumber":"217-834-6059","email":"adubs6o@cbsnews.com"}, -{"id":242,"firstName":"Shelly","lastName":"Skechley","street":"16 Morning Lane","postalCode":"60567","city":"Naperville","state":"IL","email":"sskechley6p@technorati.com"}, -{"id":243,"firstName":"Karin","lastName":"Fausch","street":"7532 Eggendart Way","postalCode":"19810","city":"Wilmington","state":"DE","phoneNumber":"302-548-2991"}, -{"id":244,"firstName":"Sal","lastName":"Harrow","street":"2632 Lien Way","postalCode":"33982","city":"Punta Gorda","state":"FL","phoneNumber":"941-904-5187","email":"sharrow6r@joomla.org"}, -{"id":245,"firstName":"Albie","lastName":"Strelitzki","street":"8436 Eggendart Terrace","postalCode":"49505","city":"Grand Rapids","state":"MI","email":"astrelitzki6s@google.com.br"}, -{"id":246,"firstName":"Augy","lastName":"Usherwood","street":"9078 Clemons Street","postalCode":"80915","city":"Colorado Springs","state":"CO","email":"ausherwood6t@wikimedia.org"}, -{"id":247,"firstName":"Solomon","lastName":"D'eathe","street":"778 Rockefeller Parkway","postalCode":"84199","city":"Salt Lake City","state":"UT"}, -{"id":248,"firstName":"Talya","lastName":"Joseff","street":"14 Graedel Court","postalCode":"99220","city":"Spokane","state":"WA","email":"tjoseff6v@amazon.de"}, -{"id":249,"firstName":"Anatol","lastName":"Self","street":"2 Stoughton Junction","postalCode":"85255","city":"Scottsdale","state":"AZ"}, -{"id":250,"firstName":"Elinore","lastName":"Bruhnke","street":"3 Bashford Alley","postalCode":"17105","city":"Harrisburg","state":"PA","email":"ebruhnke6x@usnews.com"}, -{"id":251,"firstName":"Stanfield","lastName":"Jagiello","street":"0804 Amoth Road","postalCode":"20067","city":"Washington","state":"DC"}, -{"id":252,"firstName":"Isak","lastName":"Venour","street":"04 Orin Court","postalCode":"78210","city":"San Antonio","state":"TX","email":"ivenour6z@springer.com"}, -{"id":253,"firstName":"Abigale","lastName":"Woolgar","street":"74 Porter Terrace","postalCode":"62705","city":"Springfield","state":"IL"}, -{"id":254,"firstName":"Phylys","lastName":"Casperri","street":"07 Delaware Street","postalCode":"33069","city":"Pompano Beach","state":"FL","phoneNumber":"954-224-4577"}, -{"id":255,"firstName":"Melania","lastName":"Fee","street":"194 Luster Point","postalCode":"70154","city":"New Orleans","state":"LA","phoneNumber":"504-168-6959","email":"mfee72@comsenz.com"}, -{"id":256,"firstName":"Joli","lastName":"Colquite","street":"9 Bayside Court","postalCode":"27425","city":"Greensboro","state":"NC","email":"jcolquite73@comcast.net"}, -{"id":257,"firstName":"Rahel","lastName":"Late","street":"2 Meadow Ridge Alley","postalCode":"32204","city":"Jacksonville","state":"FL"}, -{"id":258,"firstName":"Carny","lastName":"Fewell","street":"21826 Cardinal Pass","postalCode":"98140","city":"Seattle","state":"WA"}, -{"id":259,"firstName":"Lesly","lastName":"Vanyatin","street":"7730 South Court","postalCode":"25356","city":"Charleston","state":"WV","email":"lvanyatin76@histats.com"}, -{"id":260,"firstName":"Fianna","lastName":"Thomason","street":"2576 Holmberg Trail","postalCode":"27710","city":"Durham","state":"NC"}, -{"id":261,"firstName":"Bobinette","lastName":"Gowdridge","street":"6780 Superior Place","postalCode":"37605","city":"Johnson City","state":"TN","phoneNumber":"423-490-4990","email":"bgowdridge78@icio.us"}, -{"id":262,"firstName":"Karmen","lastName":"Megson","street":"34 Messerschmidt Point","postalCode":"97229","city":"Portland","state":"OR","email":"kmegson79@apache.org"}, -{"id":263,"firstName":"Thaddeus","lastName":"Padilla","street":"42 Corben Road","postalCode":"90010","city":"Los Angeles","state":"CA","phoneNumber":"213-659-3136","email":"tpadilla7a@hud.gov"}, -{"id":264,"firstName":"Hanna","lastName":"Baswall","street":"9 Old Shore Lane","postalCode":"53710","city":"Madison","state":"WI","email":"hbaswall7b@ezinearticles.com"}, -{"id":265,"firstName":"Tania","lastName":"McMorland","street":"4333 Commercial Point","postalCode":"45408","city":"Dayton","state":"OH"}, -{"id":266,"firstName":"Gifford","lastName":"Arne","street":"0 Drewry Point","postalCode":"24048","city":"Roanoke","state":"VA","email":"garne7d@samsung.com"}, -{"id":267,"firstName":"Tomasina","lastName":"Linch","street":"64992 Maple Wood Point","postalCode":"98447","city":"Tacoma","state":"WA","email":"tlinch7e@theglobeandmail.com"}, -{"id":268,"firstName":"Merrick","lastName":"Garvan","street":"7220 Melody Trail","postalCode":"90005","city":"Los Angeles","state":"CA","email":"mgarvan7f@mozilla.org"}, -{"id":269,"firstName":"Carmita","lastName":"Sailes","street":"3 Bay Lane","postalCode":"55428","city":"Minneapolis","state":"MN","email":"csailes7g@devhub.com"}, -{"id":270,"firstName":"Lesly","lastName":"Eslemont","street":"93302 Mcbride Terrace","postalCode":"19810","city":"Wilmington","state":"DE","email":"leslemont7h@wunderground.com"}, -{"id":271,"firstName":"Adelaida","lastName":"Keggins","street":"4 Birchwood Pass","postalCode":"97405","city":"Eugene","state":"OR","phoneNumber":"541-387-1319"}, -{"id":272,"firstName":"Peadar","lastName":"Forte","street":"1 Montana Center","postalCode":"32505","city":"Pensacola","state":"FL","email":"pforte7j@xing.com"}, -{"id":273,"firstName":"Godfrey","lastName":"Swatland","street":"477 Maple Wood Road","postalCode":"93034","city":"Oxnard","state":"CA","phoneNumber":"805-267-0614","email":"gswatland7k@photobucket.com"}, -{"id":274,"firstName":"Marten","lastName":"Jelleman","street":"57 Pennsylvania Plaza","postalCode":"20057","city":"Washington","state":"DC","email":"mjelleman7l@phoca.cz"}, -{"id":275,"firstName":"Sharity","lastName":"Keady","street":"753 Sauthoff Place","postalCode":"77505","city":"Pasadena","state":"TX"}, -{"id":276,"firstName":"Gabbie","lastName":"Pally","street":"45 Fallview Park","postalCode":"97255","city":"Portland","state":"OR","phoneNumber":"971-412-2293","email":"gpally7n@dyndns.org"}, -{"id":277,"firstName":"Betsy","lastName":"Rhelton","street":"9 Jackson Road","postalCode":"85040","city":"Phoenix","state":"AZ"}, -{"id":278,"firstName":"Patty","lastName":"Schooling","street":"4 Moulton Point","postalCode":"25705","city":"Huntington","state":"WV","phoneNumber":"304-908-8211","email":"pschooling7p@parallels.com"}, -{"id":279,"firstName":"Katlin","lastName":"O'Hallagan","street":"8418 Petterle Plaza","postalCode":"60636","city":"Chicago","state":"IL","email":"kohallagan7q@hao123.com"}, -{"id":280,"firstName":"Anne","lastName":"Wealleans","street":"3 Sachtjen Court","postalCode":"48609","city":"Saginaw","state":"MI"}, -{"id":281,"firstName":"Flory","lastName":"Pley","street":"6322 Golf View Court","postalCode":"19104","city":"Philadelphia","state":"PA"}, -{"id":282,"firstName":"Maryellen","lastName":"Baszkiewicz","street":"54165 Hanson Trail","postalCode":"93726","city":"Fresno","state":"CA","phoneNumber":"209-198-4916","email":"mbaszkiewicz7t@google.com.br"}, -{"id":283,"firstName":"Moyna","lastName":"Caddens","street":"17 Melrose Lane","postalCode":"11236","city":"Brooklyn","state":"NY","phoneNumber":"917-518-3987","email":"mcaddens7u@amazon.co.uk"}, -{"id":284,"firstName":"Lawton","lastName":"Ramiro","street":"2 Muir Park","postalCode":"48092","city":"Warren","state":"MI","phoneNumber":"810-472-5208","email":"lramiro7v@senate.gov"}, -{"id":285,"firstName":"Agnella","lastName":"Phelip","street":"24566 Colorado Pass","postalCode":"84145","city":"Salt Lake City","state":"UT","phoneNumber":"801-709-8696","email":"aphelip7w@woothemes.com"}, -{"id":286,"firstName":"Tracee","lastName":"Tighe","street":"41013 Cascade Lane","postalCode":"02142","city":"Cambridge","state":"MA"}, -{"id":287,"firstName":"Shelden","lastName":"Sowrey","street":"87 Glacier Hill Court","postalCode":"55557","city":"Young America","state":"MN","email":"ssowrey7y@sfgate.com"}, -{"id":288,"firstName":"Letizia","lastName":"Sallery","street":"65052 Shasta Court","postalCode":"44905","city":"Mansfield","state":"OH","phoneNumber":"419-752-9141"}, -{"id":289,"firstName":"Hilly","lastName":"Oyley","street":"7 Waywood Trail","postalCode":"30323","city":"Atlanta","state":"GA","email":"hoyley80@upenn.edu"}, -{"id":290,"firstName":"Sabra","lastName":"Grigoryev","street":"856 Michigan Trail","postalCode":"33705","city":"Saint Petersburg","state":"FL"}, -{"id":291,"firstName":"Nathanil","lastName":"Bodham","street":"536 Ridgeview Way","postalCode":"79984","city":"El Paso","state":"TX","email":"nbodham82@wikimedia.org"}, -{"id":292,"firstName":"Niven","lastName":"Hartzenberg","street":"5 Carpenter Hill","postalCode":"73167","city":"Oklahoma City","state":"OK","email":"nhartzenberg83@bandcamp.com"}, -{"id":293,"firstName":"Rachael","lastName":"Birdsall","street":"61484 Mendota Point","postalCode":"90410","city":"Santa Monica","state":"CA","email":"rbirdsall84@gmpg.org"}, -{"id":294,"firstName":"Gypsy","lastName":"Rallin","street":"4 Spohn Drive","postalCode":"77346","city":"Humble","state":"TX","phoneNumber":"713-508-2912","email":"grallin85@privacy.gov.au"}, -{"id":295,"firstName":"Skye","lastName":"Arsey","street":"49126 Maryland Lane","postalCode":"02119","city":"Boston","state":"MA"}, -{"id":296,"firstName":"Karalee","lastName":"Biddiss","street":"0327 Coleman Lane","postalCode":"10203","city":"New York City","state":"NY","email":"kbiddiss87@studiopress.com"}, -{"id":297,"firstName":"Russ","lastName":"O' Mahony","street":"7831 Caliangt Avenue","postalCode":"37665","city":"Kingsport","state":"TN","phoneNumber":"423-292-1177","email":"romahony88@umich.edu"}, -{"id":298,"firstName":"Gerianne","lastName":"Morfey","street":"1 Jay Hill","postalCode":"97229","city":"Portland","state":"OR","email":"gmorfey89@techcrunch.com"}, -{"id":299,"firstName":"Griz","lastName":"Vellacott","street":"44 Parkside Court","postalCode":"64149","city":"Kansas City","state":"MO","phoneNumber":"816-120-1692"}, -{"id":300,"firstName":"Parker","lastName":"Mantz","street":"3 Arkansas Lane","postalCode":"90005","city":"Los Angeles","state":"CA","email":"pmantz8b@va.gov"}, -{"id":301,"firstName":"Drugi","lastName":"Acaster","street":"426 Hagan Park","postalCode":"20599","city":"Washington","state":"DC","email":"dacaster8c@ihg.com"}, -{"id":302,"firstName":"Peder","lastName":"Monget","street":"9 Wayridge Parkway","postalCode":"92862","city":"Orange","state":"CA","phoneNumber":"714-532-0867","email":"pmonget8d@biblegateway.com"}, -{"id":303,"firstName":"Zilvia","lastName":"Grocutt","street":"1 Stuart Circle","postalCode":"34642","city":"Seminole","state":"FL"}, -{"id":304,"firstName":"Clyve","lastName":"Gunby","street":"75 Dunning Junction","postalCode":"79977","city":"El Paso","state":"TX","email":"cgunby8f@microsoft.com"}, -{"id":305,"firstName":"Zacharias","lastName":"Tomasini","street":"48488 Thackeray Way","postalCode":"40210","city":"Louisville","state":"KY","email":"ztomasini8g@harvard.edu"}, -{"id":306,"firstName":"Ferdinand","lastName":"McGuinley","street":"30366 Kipling Drive","postalCode":"23208","city":"Richmond","state":"VA","email":"fmcguinley8h@archive.org"}, -{"id":307,"firstName":"Ebonee","lastName":"Brumfitt","street":"18765 Division Terrace","postalCode":"30033","city":"Decatur","state":"GA","phoneNumber":"404-684-8364","email":"ebrumfitt8i@sourceforge.net"}, -{"id":308,"firstName":"Christy","lastName":"Cuniam","street":"6 Homewood Road","postalCode":"78744","city":"Austin","state":"TX","phoneNumber":"361-677-9833","email":"ccuniam8j@51.la"}, -{"id":309,"firstName":"Emelen","lastName":"Casin","street":"91 Thompson Plaza","postalCode":"33954","city":"Port Charlotte","state":"FL","email":"ecasin8k@webnode.com"}, -{"id":310,"firstName":"Babara","lastName":"Robberecht","street":"603 Oak Terrace","postalCode":"37450","city":"Chattanooga","state":"TN","email":"brobberecht8l@cargocollective.com"}, -{"id":311,"firstName":"Cesar","lastName":"Whitecross","street":"024 Oxford Junction","postalCode":"20226","city":"Washington","state":"DC","phoneNumber":"202-772-2936"}, -{"id":312,"firstName":"Frieda","lastName":"Sliman","street":"4 Beilfuss Hill","postalCode":"23324","city":"Chesapeake","state":"VA","email":"fsliman8n@bigcartel.com"}, -{"id":313,"firstName":"Dylan","lastName":"Paige","street":"26 Gina Parkway","postalCode":"55448","city":"Minneapolis","state":"MN","email":"dpaige8o@trellian.com"}, -{"id":314,"firstName":"Waring","lastName":"Labon","street":"2843 Spenser Center","postalCode":"49444","city":"Muskegon","state":"MI","phoneNumber":"231-274-0766","email":"wlabon8p@ucla.edu"}, -{"id":315,"firstName":"Conny","lastName":"Duinkerk","street":"65 Lunder Circle","postalCode":"45426","city":"Dayton","state":"OH","email":"cduinkerk8q@economist.com"}, -{"id":316,"firstName":"Nessie","lastName":"Stucksbury","street":"91449 Browning Drive","postalCode":"25705","city":"Huntington","state":"WV","phoneNumber":"304-182-0766"}, -{"id":317,"firstName":"Corrine","lastName":"Kohlert","street":"00706 Carioca Plaza","postalCode":"45223","city":"Cincinnati","state":"OH","email":"ckohlert8s@wunderground.com"}, -{"id":318,"firstName":"Horatio","lastName":"Greengrass","street":"0 Cascade Park","postalCode":"79905","city":"El Paso","state":"TX","email":"hgreengrass8t@ameblo.jp"}, -{"id":319,"firstName":"Jana","lastName":"McLae","street":"919 Esch Place","postalCode":"55428","city":"Minneapolis","state":"MN","email":"jmclae8u@nytimes.com"}, -{"id":320,"firstName":"Maressa","lastName":"Rehor","street":"55 Talisman Junction","postalCode":"90505","city":"Torrance","state":"CA","email":"mrehor8v@vinaora.com"}, -{"id":321,"firstName":"Filide","lastName":"Riehm","street":"0 Karstens Lane","postalCode":"95054","city":"Santa Clara","state":"CA"}, -{"id":322,"firstName":"Bunnie","lastName":"Mumbey","street":"9369 Bayside Circle","postalCode":"46216","city":"Indianapolis","state":"IN","email":"bmumbey8x@scribd.com"}, -{"id":323,"firstName":"Maxi","lastName":"Jentgens","street":"2970 Rowland Circle","postalCode":"84189","city":"Salt Lake City","state":"UT","phoneNumber":"801-423-8854","email":"mjentgens8y@ihg.com"}, -{"id":324,"firstName":"Florri","lastName":"Okenden","street":"2180 Cody Point","postalCode":"70187","city":"New Orleans","state":"LA","phoneNumber":"504-913-1989","email":"fokenden8z@networksolutions.com"}, -{"id":325,"firstName":"Imogen","lastName":"Grisard","street":"8 Westerfield Avenue","postalCode":"92668","city":"Orange","state":"CA","email":"igrisard90@tamu.edu"}, -{"id":326,"firstName":"Edwina","lastName":"Montes","street":"92 Carpenter Avenue","postalCode":"97216","city":"Portland","state":"OR","phoneNumber":"503-544-7296","email":"emontes91@reference.com"}, -{"id":327,"firstName":"Renelle","lastName":"MacCambridge","street":"77 Talmadge Circle","postalCode":"08638","city":"Trenton","state":"NJ","phoneNumber":"609-150-9438","email":"rmaccambridge92@springer.com"}, -{"id":328,"firstName":"Sterne","lastName":"Taberner","street":"642 6th Terrace","postalCode":"10120","city":"New York City","state":"NY","email":"staberner93@miibeian.gov.cn"}, -{"id":329,"firstName":"Garvy","lastName":"Pankethman","street":"8618 Kennedy Terrace","postalCode":"79405","city":"Lubbock","state":"TX","phoneNumber":"806-470-8784","email":"gpankethman94@free.fr"}, -{"id":330,"firstName":"Nathanil","lastName":"Holston","street":"27247 Eliot Avenue","postalCode":"31190","city":"Atlanta","state":"GA","email":"nholston95@drupal.org"}, -{"id":331,"firstName":"Caresse","lastName":"Kilty","street":"514 Manufacturers Pass","postalCode":"76205","city":"Denton","state":"TX","email":"ckilty96@umich.edu"}, -{"id":332,"firstName":"Arlinda","lastName":"Brenstuhl","street":"2 Sunnyside Avenue","postalCode":"55470","city":"Minneapolis","state":"MN","email":"abrenstuhl97@wisc.edu"}, -{"id":333,"firstName":"Darcy","lastName":"Dunne","street":"3 Badeau Park","postalCode":"91328","city":"Northridge","state":"CA"}, -{"id":334,"firstName":"Malva","lastName":"Grew","street":"2242 Huxley Hill","postalCode":"68510","city":"Lincoln","state":"NE","email":"mgrew99@com.com"}, -{"id":335,"firstName":"Sukey","lastName":"Winspur","street":"475 Melvin Way","postalCode":"68524","city":"Lincoln","state":"NE","phoneNumber":"402-816-9401"}, -{"id":336,"firstName":"Beth","lastName":"O'Dougherty","street":"450 Eastlawn Park","postalCode":"93591","city":"Palmdale","state":"CA","phoneNumber":"661-845-8781"}, -{"id":337,"firstName":"Cortney","lastName":"Meers","street":"9 Chive Drive","postalCode":"93762","city":"Fresno","state":"CA","email":"cmeers9c@diigo.com"}, -{"id":338,"firstName":"Geralda","lastName":"Brocket","street":"0686 La Follette Avenue","postalCode":"80126","city":"Littleton","state":"CO","phoneNumber":"720-641-1371","email":"gbrocket9d@youku.com"}, -{"id":339,"firstName":"Lishe","lastName":"Maliphant","street":"5 Erie Plaza","postalCode":"63169","city":"Saint Louis","state":"MO","email":"lmaliphant9e@sfgate.com"}, -{"id":340,"firstName":"Brod","lastName":"Dobrovsky","street":"9 Gateway Park","postalCode":"79405","city":"Lubbock","state":"TX"}, -{"id":341,"firstName":"Philippe","lastName":"Argile","street":"4 Red Cloud Plaza","postalCode":"49444","city":"Muskegon","state":"MI","phoneNumber":"231-633-5495"}, -{"id":342,"firstName":"Sadye","lastName":"Sally","street":"07 Mendota Terrace","postalCode":"75507","city":"Texarkana","state":"TX","email":"ssally9h@e-recht24.de"}, -{"id":343,"firstName":"Napoleon","lastName":"Piggott","street":"3968 Roxbury Point","postalCode":"35905","city":"Gadsden","state":"AL","email":"npiggott9i@cnbc.com"}, -{"id":344,"firstName":"Jere","lastName":"Larn","street":"5086 Dahle Crossing","postalCode":"39534","city":"Biloxi","state":"MS","email":"jlarn9j@twitter.com"}, -{"id":345,"firstName":"Bevon","lastName":"Stidson","street":"7 Armistice Court","postalCode":"23436","city":"Suffolk","state":"VA","email":"bstidson9k@alexa.com"}, -{"id":346,"firstName":"Drugi","lastName":"Ewbach","street":"6032 5th Avenue","postalCode":"02208","city":"Boston","state":"MA","email":"dewbach9l@techcrunch.com"}, -{"id":347,"firstName":"Milka","lastName":"Caizley","street":"7 Anderson Junction","postalCode":"37228","city":"Nashville","state":"TN","phoneNumber":"615-305-6985","email":"mcaizley9m@cyberchimps.com"}, -{"id":348,"firstName":"Wilton","lastName":"Biagi","street":"80833 6th Crossing","postalCode":"40215","city":"Louisville","state":"KY","email":"wbiagi9n@vinaora.com"}, -{"id":349,"firstName":"Dilly","lastName":"Spradbrow","street":"5 Harbort Street","postalCode":"45419","city":"Dayton","state":"OH","email":"dspradbrow9o@marketwatch.com"}, -{"id":350,"firstName":"Gan","lastName":"Gookey","street":"8387 Bultman Terrace","postalCode":"75241","city":"Dallas","state":"TX"}, -{"id":351,"firstName":"Nanon","lastName":"Mulrenan","street":"47257 Reindahl Drive","postalCode":"22119","city":"Merrifield","state":"VA","phoneNumber":"571-637-8154","email":"nmulrenan9q@godaddy.com"}, -{"id":352,"firstName":"Frederique","lastName":"Watkiss","street":"61 Heath Pass","postalCode":"70124","city":"New Orleans","state":"LA","phoneNumber":"504-891-7051"}, -{"id":353,"firstName":"Sinclare","lastName":"MacCurlye","street":"514 Meadow Ridge Place","postalCode":"97240","city":"Portland","state":"OR","phoneNumber":"971-190-5174","email":"smaccurlye9s@google.ru"}, -{"id":354,"firstName":"Jessie","lastName":"Newlands","street":"80509 Northland Pass","postalCode":"33111","city":"Miami","state":"FL","phoneNumber":"786-557-9193"}, -{"id":355,"firstName":"Jamaal","lastName":"Molder","street":"90 Mcbride Trail","postalCode":"78764","city":"Austin","state":"TX","phoneNumber":"512-320-8728"}, -{"id":356,"firstName":"Benni","lastName":"Sherel","street":"7 Springs Road","postalCode":"15235","city":"Pittsburgh","state":"PA","email":"bsherel9v@hostgator.com"}, -{"id":357,"firstName":"Dene","lastName":"Brigge","street":"8560 Sutteridge Parkway","postalCode":"32412","city":"Panama City","state":"FL"}, -{"id":358,"firstName":"Timoteo","lastName":"Iban","street":"52858 Oak Valley Hill","postalCode":"93750","city":"Fresno","state":"CA","email":"tiban9x@europa.eu"}, -{"id":359,"firstName":"Dar","lastName":"Quillinane","street":"2 Carberry Junction","postalCode":"66276","city":"Shawnee Mission","state":"KS","phoneNumber":"913-977-7562","email":"dquillinane9y@msn.com"}, -{"id":360,"firstName":"Claudian","lastName":"Tinson","street":"445 Novick Avenue","postalCode":"79968","city":"El Paso","state":"TX","email":"ctinson9z@google.cn"}, -{"id":361,"firstName":"Clarice","lastName":"Deneve","street":"94 Meadow Ridge Road","postalCode":"37131","city":"Murfreesboro","state":"TN","phoneNumber":"615-780-7667"}, -{"id":362,"firstName":"Hilary","lastName":"Bithell","street":"20 Russell Trail","postalCode":"81010","city":"Pueblo","state":"CO","email":"hbithella1@list-manage.com"}, -{"id":363,"firstName":"Mathew","lastName":"Scrivin","street":"4 Elgar Point","postalCode":"90081","city":"Los Angeles","state":"CA","phoneNumber":"213-898-6650","email":"mscrivina2@about.me"}, -{"id":364,"firstName":"Idell","lastName":"Rambadt","street":"6 Cherokee Hill","postalCode":"90840","city":"Long Beach","state":"CA","email":"irambadta3@ustream.tv"}, -{"id":365,"firstName":"Nealon","lastName":"Schoolfield","street":"1 Northland Point","postalCode":"74133","city":"Tulsa","state":"OK"}, -{"id":366,"firstName":"Gregorius","lastName":"Bartot","street":"24636 Eagle Crest Crossing","postalCode":"32215","city":"Jacksonville","state":"FL","email":"gbartota5@blogger.com"}, -{"id":367,"firstName":"Inessa","lastName":"Hullin","street":"559 Bartillon Trail","postalCode":"33142","city":"Miami","state":"FL","phoneNumber":"305-381-6621","email":"ihullina6@pcworld.com"}, -{"id":368,"firstName":"Andie","lastName":"Bampford","street":"5204 Meadow Valley Street","postalCode":"92825","city":"Anaheim","state":"CA","email":"abampforda7@sun.com"}, -{"id":369,"firstName":"Duane","lastName":"MacShirrie","street":"5077 Kings Parkway","postalCode":"92725","city":"Santa Ana","state":"CA","email":"dmacshirriea8@rambler.ru"}, -{"id":370,"firstName":"Sydel","lastName":"Deerr","street":"1 Commercial Road","postalCode":"30356","city":"Atlanta","state":"GA","phoneNumber":"404-209-0194","email":"sdeerra9@phpbb.com"}, -{"id":371,"firstName":"Mel","lastName":"Miles","street":"28164 Melody Plaza","postalCode":"90847","city":"Long Beach","state":"CA","phoneNumber":"562-932-1172"}, -{"id":372,"firstName":"Jone","lastName":"Drinkel","street":"946 Reindahl Point","postalCode":"48604","city":"Saginaw","state":"MI","phoneNumber":"989-547-0653"}, -{"id":373,"firstName":"Marcellus","lastName":"MacGilmartin","street":"10568 Westerfield Way","postalCode":"32868","city":"Orlando","state":"FL","phoneNumber":"407-874-6188","email":"mmacgilmartinac@fotki.com"}, -{"id":374,"firstName":"Bret","lastName":"Hardan","street":"9 Hayes Crossing","postalCode":"32309","city":"Tallahassee","state":"FL","email":"bhardanad@mit.edu"}, -{"id":375,"firstName":"Heddie","lastName":"Cesaric","street":"502 Cody Crossing","postalCode":"95397","city":"Modesto","state":"CA"}, -{"id":376,"firstName":"Tansy","lastName":"Maeer","street":"526 Messerschmidt Court","postalCode":"94089","city":"Sunnyvale","state":"CA","email":"tmaeeraf@arizona.edu"}, -{"id":377,"firstName":"Waverly","lastName":"West-Frimley","street":"02 Quincy Trail","postalCode":"20575","city":"Washington","state":"DC","phoneNumber":"202-493-3304","email":"wwestfrimleyag@ft.com"}, -{"id":378,"firstName":"Dido","lastName":"de Clercq","street":"7 Norway Maple Center","postalCode":"84125","city":"Salt Lake City","state":"UT","email":"ddeclercqah@trellian.com"}, -{"id":379,"firstName":"Vic","lastName":"Samuels","street":"2 Kipling Drive","postalCode":"31190","city":"Atlanta","state":"GA","email":"vsamuelsai@goo.gl"}, -{"id":380,"firstName":"Jeno","lastName":"Freiburger","street":"431 Golden Leaf Parkway","postalCode":"32610","city":"Gainesville","state":"FL","email":"jfreiburgeraj@theguardian.com"}, -{"id":381,"firstName":"Christine","lastName":"Basketter","street":"4 Lotheville Terrace","postalCode":"39305","city":"Meridian","state":"MS","phoneNumber":"601-702-1546"}, -{"id":382,"firstName":"Karry","lastName":"Corsan","street":"09189 Lakeland Point","postalCode":"27409","city":"Greensboro","state":"NC","phoneNumber":"336-445-0006","email":"kcorsanal@usgs.gov"}, -{"id":383,"firstName":"Barri","lastName":"Brinsden","street":"53 Shelley Drive","postalCode":"35225","city":"Birmingham","state":"AL","email":"bbrinsdenam@1und1.de"}, -{"id":384,"firstName":"Hyacintha","lastName":"Boddam","street":"45 Sugar Circle","postalCode":"10160","city":"New York City","state":"NY","phoneNumber":"212-794-6062"}, -{"id":385,"firstName":"Brande","lastName":"Remnant","street":"283 Stone Corner Road","postalCode":"31904","city":"Columbus","state":"GA","phoneNumber":"706-211-4851","email":"bremnantao@people.com.cn"}, -{"id":386,"firstName":"Tally","lastName":"Bygraves","street":"54833 Northport Pass","postalCode":"85072","city":"Phoenix","state":"AZ","email":"tbygravesap@jigsy.com"}, -{"id":387,"firstName":"Garfield","lastName":"Pressnell","street":"63077 Hudson Court","postalCode":"30061","city":"Marietta","state":"GA","email":"gpressnellaq@archive.org"}, -{"id":388,"firstName":"Romonda","lastName":"Stiggles","street":"17 Russell Parkway","postalCode":"32627","city":"Gainesville","state":"FL","phoneNumber":"352-600-9676"}, -{"id":389,"firstName":"Dedie","lastName":"Ralling","street":"8 Judy Plaza","postalCode":"94137","city":"San Francisco","state":"CA","email":"drallingas@wikia.com"}, -{"id":390,"firstName":"Maddi","lastName":"Cornau","street":"5 Oriole Way","postalCode":"92105","city":"San Diego","state":"CA","phoneNumber":"619-388-6359","email":"mcornauat@adobe.com"}, -{"id":391,"firstName":"Zeke","lastName":"Jennery","street":"65332 Sommers Avenue","postalCode":"48206","city":"Detroit","state":"MI","email":"zjenneryau@elegantthemes.com"}, -{"id":392,"firstName":"Danya","lastName":"Fairlaw","street":"343 Logan Alley","postalCode":"33111","city":"Miami","state":"FL","email":"dfairlawav@irs.gov"}, -{"id":393,"firstName":"Rabi","lastName":"Petheridge","street":"7 Monica Alley","postalCode":"64054","city":"Independence","state":"MO","phoneNumber":"816-501-9452"}, -{"id":394,"firstName":"Ebba","lastName":"Skellen","street":"2655 Iowa Terrace","postalCode":"63150","city":"Saint Louis","state":"MO","phoneNumber":"314-695-7831","email":"eskellenax@nbcnews.com"}, -{"id":395,"firstName":"Marie-ann","lastName":"Glaysher","street":"4 Lakewood Hill","postalCode":"12247","city":"Albany","state":"NY","phoneNumber":"518-634-2425"}, -{"id":396,"firstName":"Arne","lastName":"Quincey","street":"162 Redwing Way","postalCode":"83711","city":"Boise","state":"ID"}, -{"id":397,"firstName":"Clarita","lastName":"Okroy","street":"05 Delaware Way","postalCode":"45218","city":"Cincinnati","state":"OH","email":"cokroyb0@stumbleupon.com"}, -{"id":398,"firstName":"Renault","lastName":"Weighell","street":"498 Dovetail Place","postalCode":"79710","city":"Midland","state":"TX","phoneNumber":"432-955-1408"}, -{"id":399,"firstName":"Roderich","lastName":"Mankor","street":"07 Dayton Way","postalCode":"92160","city":"San Diego","state":"CA"}, -{"id":400,"firstName":"Arv","lastName":"Sunnex","street":"89 Ronald Regan Terrace","postalCode":"91109","city":"Pasadena","state":"CA","email":"asunnexb3@vkontakte.ru"}, -{"id":401,"firstName":"Sonia","lastName":"Cowperthwaite","street":"77 Dennis Point","postalCode":"16550","city":"Erie","state":"PA"}, -{"id":402,"firstName":"Buddie","lastName":"Goscomb","street":"85675 Eastlawn Pass","postalCode":"20535","city":"Washington","state":"DC"}, -{"id":403,"firstName":"Brandi","lastName":"Swaine","street":"39961 Del Mar Lane","postalCode":"39705","city":"Columbus","state":"MS","phoneNumber":"662-306-2164","email":"bswaineb6@miibeian.gov.cn"}, -{"id":404,"firstName":"Jenny","lastName":"Cabbell","street":"743 Fordem Center","postalCode":"78285","city":"San Antonio","state":"TX","phoneNumber":"210-491-9874","email":"jcabbellb7@techcrunch.com"}, -{"id":405,"firstName":"Vincent","lastName":"People","street":"83 Tennessee Way","postalCode":"77293","city":"Houston","state":"TX","phoneNumber":"281-261-1928","email":"vpeopleb8@github.io"}, -{"id":406,"firstName":"Reinald","lastName":"Roles","street":"2 Division Road","postalCode":"53785","city":"Madison","state":"WI","phoneNumber":"608-568-7958","email":"rrolesb9@google.fr"}, -{"id":407,"firstName":"Kale","lastName":"Wanek","street":"7 Crescent Oaks Terrace","postalCode":"46852","city":"Fort Wayne","state":"IN","phoneNumber":"260-844-9669","email":"kwanekba@scribd.com"}, -{"id":408,"firstName":"Charisse","lastName":"Perse","street":"94449 Gateway Street","postalCode":"91117","city":"Pasadena","state":"CA","email":"cpersebb@ycombinator.com"}, -{"id":409,"firstName":"Konstantin","lastName":"Aslum","street":"08 Kings Trail","postalCode":"80328","city":"Boulder","state":"CO","email":"kaslumbc@opera.com"}, -{"id":410,"firstName":"Tyson","lastName":"O'Hartigan","street":"75122 Crowley Place","postalCode":"95173","city":"San Jose","state":"CA","phoneNumber":"408-879-0901","email":"tohartiganbd@devhub.com"}, -{"id":411,"firstName":"Fallon","lastName":"Haysman","street":"477 High Crossing Place","postalCode":"23293","city":"Richmond","state":"VA"}, -{"id":412,"firstName":"Svend","lastName":"Scarlet","street":"2856 Merrick Circle","postalCode":"90087","city":"Los Angeles","state":"CA","email":"sscarletbf@clickbank.net"}, -{"id":413,"firstName":"Gabey","lastName":"Colter","street":"7 2nd Alley","postalCode":"90610","city":"Whittier","state":"CA"}, -{"id":414,"firstName":"Hart","lastName":"Densell","street":"2687 Elka Alley","postalCode":"99599","city":"Anchorage","state":"AK","phoneNumber":"907-286-6079"}, -{"id":415,"firstName":"Claresta","lastName":"Folger","street":"5 Amoth Alley","postalCode":"27116","city":"Winston Salem","state":"NC"}, -{"id":416,"firstName":"Rica","lastName":"Lightowlers","street":"54303 Mayer Drive","postalCode":"61825","city":"Champaign","state":"IL","email":"rlightowlersbj@so-net.ne.jp"}, -{"id":417,"firstName":"Paula","lastName":"Treadaway","street":"8 Anniversary Road","postalCode":"20456","city":"Washington","state":"DC"}, -{"id":418,"firstName":"Francoise","lastName":"Gooderick","street":"13 Knutson Lane","postalCode":"33325","city":"Fort Lauderdale","state":"FL","email":"fgooderickbl@dedecms.com"}, -{"id":419,"firstName":"Ferdy","lastName":"Nannizzi","street":"578 Esker Trail","postalCode":"25321","city":"Charleston","state":"WV","email":"fnannizzibm@rambler.ru"}, -{"id":420,"firstName":"Dody","lastName":"Gettone","street":"9 Veith Court","postalCode":"62711","city":"Springfield","state":"IL"}, -{"id":421,"firstName":"Ronna","lastName":"Godleman","street":"6 Jenna Trail","postalCode":"22301","city":"Alexandria","state":"VA","email":"rgodlemanbo@hexun.com"}, -{"id":422,"firstName":"Adey","lastName":"Waith","street":"2 Mayer Avenue","postalCode":"12325","city":"Schenectady","state":"NY"}, -{"id":423,"firstName":"Stanislaw","lastName":"Garahan","street":"660 Merry Avenue","postalCode":"62723","city":"Springfield","state":"IL","phoneNumber":"217-587-6734"}, -{"id":424,"firstName":"Westley","lastName":"Knowles","street":"67430 Lakeland Circle","postalCode":"53263","city":"Milwaukee","state":"WI","email":"wknowlesbr@msu.edu"}, -{"id":425,"firstName":"Dion","lastName":"Jamson","street":"696 Birchwood Circle","postalCode":"80015","city":"Aurora","state":"CO","phoneNumber":"720-486-4494"}, -{"id":426,"firstName":"Glynis","lastName":"Bourhill","street":"091 Harper Park","postalCode":"40250","city":"Louisville","state":"KY"}, -{"id":427,"firstName":"Massimo","lastName":"Briand","street":"37 Northview Junction","postalCode":"75507","city":"Texarkana","state":"TX","email":"mbriandbu@etsy.com"}, -{"id":428,"firstName":"Tremayne","lastName":"Cadore","street":"6721 Anthes Point","postalCode":"94605","city":"Oakland","state":"CA","email":"tcadorebv@mozilla.com"}, -{"id":429,"firstName":"Lea","lastName":"Wildman","street":"52 Dixon Point","postalCode":"50310","city":"Des Moines","state":"IA","phoneNumber":"515-536-2096"}, -{"id":430,"firstName":"Ambur","lastName":"Oxlade","street":"356 Porter Center","postalCode":"44485","city":"Warren","state":"OH"}, -{"id":431,"firstName":"Jyoti","lastName":"Gillet","street":"13 Del Mar Parkway","postalCode":"81505","city":"Grand Junction","state":"CO","phoneNumber":"970-598-0357"}, -{"id":432,"firstName":"Sascha","lastName":"Stanyan","street":"77289 Blue Bill Park Alley","postalCode":"06120","city":"Hartford","state":"CT","email":"sstanyanbz@geocities.jp"}, -{"id":433,"firstName":"Spenser","lastName":"Harry","street":"2021 Oak Place","postalCode":"32835","city":"Orlando","state":"FL","email":"sharryc0@privacy.gov.au"}, -{"id":434,"firstName":"Clim","lastName":"Penrose","street":"8 Warrior Road","postalCode":"15255","city":"Pittsburgh","state":"PA","email":"cpenrosec1@blogtalkradio.com"}, -{"id":435,"firstName":"Jewell","lastName":"McKinnon","street":"4 Delladonna Street","postalCode":"36114","city":"Montgomery","state":"AL","email":"jmckinnonc2@tinypic.com"}, -{"id":436,"firstName":"Estrellita","lastName":"Amburgy","street":"5538 Tennessee Plaza","postalCode":"17121","city":"Harrisburg","state":"PA","phoneNumber":"717-274-8930","email":"eamburgyc3@forbes.com"}, -{"id":437,"firstName":"Sarah","lastName":"Fears","street":"61 Springs Park","postalCode":"93034","city":"Oxnard","state":"CA","email":"sfearsc4@wisc.edu"}, -{"id":438,"firstName":"Nixie","lastName":"Peddie","street":"7 Armistice Way","postalCode":"10155","city":"New York City","state":"NY","email":"npeddiec5@free.fr"}, -{"id":439,"firstName":"Ardisj","lastName":"Rohmer","street":"726 Crowley Point","postalCode":"93399","city":"Bakersfield","state":"CA","email":"arohmerc6@google.nl"}, -{"id":440,"firstName":"Wallie","lastName":"Johanssen","street":"9555 Jana Park","postalCode":"28410","city":"Wilmington","state":"NC","phoneNumber":"910-160-4520","email":"wjohanssenc7@boston.com"}, -{"id":441,"firstName":"Allan","lastName":"Jodlkowski","street":"31585 Kedzie Park","postalCode":"89150","city":"Las Vegas","state":"NV","phoneNumber":"702-782-3289","email":"ajodlkowskic8@sogou.com"}, -{"id":442,"firstName":"Harris","lastName":"Cadden","street":"96829 Fieldstone Park","postalCode":"16565","city":"Erie","state":"PA","phoneNumber":"814-745-1099"}, -{"id":443,"firstName":"Nigel","lastName":"Girardengo","street":"24703 Red Cloud Road","postalCode":"90310","city":"Inglewood","state":"CA","email":"ngirardengoca@ow.ly"}, -{"id":444,"firstName":"Aila","lastName":"Tinniswood","street":"62812 Stephen Parkway","postalCode":"13205","city":"Syracuse","state":"NY","phoneNumber":"315-847-2259","email":"atinniswoodcb@google.com.br"}, -{"id":445,"firstName":"Genni","lastName":"Geockle","street":"81 Bobwhite Plaza","postalCode":"93721","city":"Fresno","state":"CA","email":"ggeocklecc@furl.net"}, -{"id":446,"firstName":"Madison","lastName":"Brikner","street":"166 Coolidge Trail","postalCode":"07208","city":"Elizabeth","state":"NJ","email":"mbriknercd@myspace.com"}, -{"id":447,"firstName":"Akim","lastName":"Gotthard.sf","street":"0017 Heffernan Parkway","postalCode":"71914","city":"Hot Springs National Park","state":"AR","email":"agotthardsfce@google.com.au"}, -{"id":448,"firstName":"Andria","lastName":"Cardello","street":"1089 Stang Road","postalCode":"96835","city":"Honolulu","state":"HI","phoneNumber":"808-372-6528"}, -{"id":449,"firstName":"Laureen","lastName":"Crawshaw","street":"13 Manitowish Avenue","postalCode":"23504","city":"Norfolk","state":"VA","phoneNumber":"757-220-4043"}, -{"id":450,"firstName":"Henderson","lastName":"Parmley","street":"3408 Superior Street","postalCode":"28410","city":"Wilmington","state":"NC","email":"hparmleych@diigo.com"}, -{"id":451,"firstName":"Henri","lastName":"Arnley","street":"54 Knutson Park","postalCode":"11470","city":"Jamaica","state":"NY","phoneNumber":"718-365-7389"}, -{"id":452,"firstName":"Phil","lastName":"Trunkfield","street":"07 Arizona Way","postalCode":"85030","city":"Phoenix","state":"AZ","email":"ptrunkfieldcj@cisco.com"}, -{"id":453,"firstName":"Chery","lastName":"Nangle","street":"03 Merrick Way","postalCode":"88569","city":"El Paso","state":"TX","phoneNumber":"915-959-5535","email":"cnangleck@tumblr.com"}, -{"id":454,"firstName":"Leora","lastName":"Fields","street":"0260 Eastlawn Lane","postalCode":"85311","city":"Glendale","state":"AZ","email":"lfieldscl@nyu.edu"}, -{"id":455,"firstName":"Ronnica","lastName":"Pocknoll","street":"786 Hovde Plaza","postalCode":"78410","city":"Corpus Christi","state":"TX","email":"rpocknollcm@unesco.org"}, -{"id":456,"firstName":"Valida","lastName":"Romayn","street":"1108 Hudson Drive","postalCode":"34615","city":"Clearwater","state":"FL","email":"vromayncn@usatoday.com"}, -{"id":457,"firstName":"Randee","lastName":"Strowther","street":"441 Cordelia Point","postalCode":"27710","city":"Durham","state":"NC","phoneNumber":"919-463-1516","email":"rstrowtherco@trellian.com"}, -{"id":458,"firstName":"Ansell","lastName":"Blacklock","street":"9393 Kedzie Point","postalCode":"75358","city":"Dallas","state":"TX","phoneNumber":"214-949-3912"}, -{"id":459,"firstName":"Bailie","lastName":"Wing","street":"79459 Buhler Way","postalCode":"15279","city":"Pittsburgh","state":"PA","phoneNumber":"412-431-5446"}, -{"id":460,"firstName":"Leesa","lastName":"Wellbeloved","street":"4553 Dakota Circle","postalCode":"40215","city":"Louisville","state":"KY","phoneNumber":"502-145-8496","email":"lwellbelovedcr@go.com"}, -{"id":461,"firstName":"Sarge","lastName":"Tocknell","street":"9884 North Alley","postalCode":"80249","city":"Denver","state":"CO","phoneNumber":"303-603-8315","email":"stocknellcs@artisteer.com"}, -{"id":462,"firstName":"Loralyn","lastName":"Grimolbie","street":"3620 Clyde Gallagher Junction","postalCode":"91103","city":"Pasadena","state":"CA","email":"lgrimolbiect@purevolume.com"}, -{"id":463,"firstName":"Ki","lastName":"Youdell","street":"3 Gina Center","postalCode":"81005","city":"Pueblo","state":"CO"}, -{"id":464,"firstName":"Katerine","lastName":"Herreros","street":"70 Westend Place","postalCode":"57105","city":"Sioux Falls","state":"SD"}, -{"id":465,"firstName":"Frasquito","lastName":"Nockolds","street":"21 Dwight Park","postalCode":"11236","city":"Brooklyn","state":"NY","phoneNumber":"917-761-0549"}, -{"id":466,"firstName":"Krystalle","lastName":"Brierly","street":"7797 Forest Dale Lane","postalCode":"90410","city":"Santa Monica","state":"CA","email":"kbrierlycx@simplemachines.org"}, -{"id":467,"firstName":"Tobin","lastName":"Guillford","street":"501 Messerschmidt Alley","postalCode":"98195","city":"Seattle","state":"WA","phoneNumber":"206-862-7413","email":"tguillfordcy@fastcompany.com"}, -{"id":468,"firstName":"Lorita","lastName":"Sikorski","street":"83 Corscot Junction","postalCode":"44905","city":"Mansfield","state":"OH","phoneNumber":"419-278-2324","email":"lsikorskicz@intel.com"}, -{"id":469,"firstName":"Hermon","lastName":"Chomley","street":"696 Talisman Lane","postalCode":"35290","city":"Birmingham","state":"AL"}, -{"id":470,"firstName":"Karolina","lastName":"Andrault","street":"49738 Maple Wood Place","postalCode":"99709","city":"Fairbanks","state":"AK","phoneNumber":"907-337-1698","email":"kandraultd1@bloglines.com"}, -{"id":471,"firstName":"Lev","lastName":"Pankhurst.","street":"442 Pennsylvania Crossing","postalCode":"23605","city":"Newport News","state":"VA","phoneNumber":"757-832-3631"}, -{"id":472,"firstName":"Bianca","lastName":"Garfath","street":"7 Forest Run Center","postalCode":"71914","city":"Hot Springs National Park","state":"AR","email":"bgarfathd3@youku.com"}, -{"id":473,"firstName":"Walden","lastName":"Van der Linde","street":"6 Namekagon Parkway","postalCode":"70187","city":"New Orleans","state":"LA","email":"wvanderlinded4@netscape.com"}, -{"id":474,"firstName":"Alexandra","lastName":"Vasyukhin","street":"471 School Alley","postalCode":"80910","city":"Colorado Springs","state":"CO","email":"avasyukhind5@samsung.com"}, -{"id":475,"firstName":"Perry","lastName":"Spere","street":"33 Autumn Leaf Street","postalCode":"79994","city":"El Paso","state":"TX","email":"pspered6@tamu.edu"}, -{"id":476,"firstName":"Cristobal","lastName":"Afonso","street":"5 Lake View Way","postalCode":"19136","city":"Philadelphia","state":"PA","email":"cafonsod7@themeforest.net"}, -{"id":477,"firstName":"Sebastien","lastName":"Annets","street":"4229 Bowman Trail","postalCode":"43699","city":"Toledo","state":"OH","phoneNumber":"419-981-8630","email":"sannetsd8@guardian.co.uk"}, -{"id":478,"firstName":"Prentice","lastName":"Desorts","street":"54 Mendota Drive","postalCode":"31196","city":"Atlanta","state":"GA","phoneNumber":"404-235-6736","email":"pdesortsd9@who.int"}, -{"id":479,"firstName":"Rubin","lastName":"Dunkerk","street":"035 Myrtle Park","postalCode":"94297","city":"Sacramento","state":"CA","phoneNumber":"916-658-2157","email":"rdunkerkda@columbia.edu"}, -{"id":480,"firstName":"Jesselyn","lastName":"Bidnall","street":"2353 Norway Maple Court","postalCode":"07522","city":"Paterson","state":"NJ","email":"jbidnalldb@4shared.com"}, -{"id":481,"firstName":"Arleta","lastName":"Massy","street":"2 Bluejay Lane","postalCode":"10310","city":"Staten Island","state":"NY"}, -{"id":482,"firstName":"Trescha","lastName":"Joncic","street":"052 Summit Way","postalCode":"13217","city":"Syracuse","state":"NY"}, -{"id":483,"firstName":"Joshuah","lastName":"Galbreth","street":"16 Elka Place","postalCode":"08922","city":"New Brunswick","state":"NJ","email":"jgalbrethde@rambler.ru"}, -{"id":484,"firstName":"Clywd","lastName":"Henlon","street":"26 Thackeray Pass","postalCode":"90040","city":"Los Angeles","state":"CA","email":"chenlondf@unesco.org"}, -{"id":485,"firstName":"Glenda","lastName":"Grayley","street":"6326 Ohio Plaza","postalCode":"91411","city":"Van Nuys","state":"CA"}, -{"id":486,"firstName":"Glynda","lastName":"Stokell","street":"6 Schmedeman Court","postalCode":"60641","city":"Chicago","state":"IL","email":"gstokelldh@ted.com"}, -{"id":487,"firstName":"Kath","lastName":"Harrap","street":"43769 Barby Plaza","postalCode":"32304","city":"Tallahassee","state":"FL","email":"kharrapdi@cargocollective.com"}, -{"id":488,"firstName":"Dickie","lastName":"Domotor","street":"2954 Toban Lane","postalCode":"98133","city":"Seattle","state":"WA","email":"ddomotordj@hhs.gov"}, -{"id":489,"firstName":"Ceciley","lastName":"Hitzke","street":"9102 Westport Pass","postalCode":"40618","city":"Frankfort","state":"KY","phoneNumber":"502-545-5506","email":"chitzkedk@newsvine.com"}, -{"id":490,"firstName":"Adler","lastName":"Webb-Bowen","street":"5 Hanover Street","postalCode":"32123","city":"Daytona Beach","state":"FL"}, -{"id":491,"firstName":"Fergus","lastName":"Domerq","street":"06 Hansons Road","postalCode":"58106","city":"Fargo","state":"ND","phoneNumber":"701-656-3778"}, -{"id":492,"firstName":"Kimbra","lastName":"Petherick","street":"867 Mayer Drive","postalCode":"39236","city":"Jackson","state":"MS"}, -{"id":493,"firstName":"Geneva","lastName":"Hobgen","street":"74 Vernon Parkway","postalCode":"53710","city":"Madison","state":"WI","email":"ghobgendo@google.de"}, -{"id":494,"firstName":"Jillane","lastName":"Skitral","street":"9747 Ruskin Point","postalCode":"22405","city":"Fredericksburg","state":"VA","email":"jskitraldp@mysql.com"}, -{"id":495,"firstName":"Carolin","lastName":"Pimblotte","street":"8 Union Way","postalCode":"75358","city":"Dallas","state":"TX","phoneNumber":"214-109-7114","email":"cpimblottedq@cargocollective.com"}, -{"id":496,"firstName":"Wandis","lastName":"Andreasson","street":"3 Nancy Parkway","postalCode":"70033","city":"Metairie","state":"LA","email":"wandreassondr@topsy.com"}, -{"id":497,"firstName":"Baily","lastName":"Dalliston","street":"602 Melrose Way","postalCode":"25331","city":"Charleston","state":"WV","email":"bdallistonds@storify.com"}, -{"id":498,"firstName":"Kissie","lastName":"Lammiman","street":"4 Memorial Terrace","postalCode":"06510","city":"New Haven","state":"CT","phoneNumber":"203-724-3731","email":"klammimandt@barnesandnoble.com"}, -{"id":499,"firstName":"Cloris","lastName":"Dorning","street":"4 Lien Road","postalCode":"37235","city":"Nashville","state":"TN","email":"cdorningdu@unesco.org"}, -{"id":500,"firstName":"Jemimah","lastName":"Juppe","street":"979 Tennessee Pass","postalCode":"85305","city":"Glendale","state":"AZ"}, -{"id":501,"firstName":"Fanchette","lastName":"Marlor","street":"90 Waywood Circle","postalCode":"44511","city":"Youngstown","state":"OH","email":"fmarlordw@is.gd"}, -{"id":502,"firstName":"Carmelle","lastName":"Stillmann","street":"9124 Sachtjen Way","postalCode":"74184","city":"Tulsa","state":"OK","email":"cstillmanndx@telegraph.co.uk"}, -{"id":503,"firstName":"Joelle","lastName":"Mumford","street":"5 Susan Point","postalCode":"28410","city":"Wilmington","state":"NC","email":"jmumforddy@yellowbook.com"}, -{"id":504,"firstName":"Vicky","lastName":"Danzelman","street":"472 Pond Junction","postalCode":"11220","city":"Brooklyn","state":"NY","email":"vdanzelmandz@stumbleupon.com"}, -{"id":505,"firstName":"Baudoin","lastName":"Grenshiels","street":"4703 Tony Circle","postalCode":"76198","city":"Fort Worth","state":"TX","email":"bgrenshielse0@devhub.com"}, -{"id":506,"firstName":"Rosetta","lastName":"Wennington","street":"3 Kensington Crossing","postalCode":"14619","city":"Rochester","state":"NY"}, -{"id":507,"firstName":"Eudora","lastName":"Murtell","street":"97 Mockingbird Circle","postalCode":"92867","city":"Orange","state":"CA","phoneNumber":"949-899-3967"}, -{"id":508,"firstName":"Sonnie","lastName":"Hawkin","street":"76669 Green Ridge Crossing","postalCode":"79491","city":"Lubbock","state":"TX","email":"shawkine3@wikia.com"}, -{"id":509,"firstName":"Ulysses","lastName":"Uman","street":"4 Fieldstone Circle","postalCode":"32128","city":"Daytona Beach","state":"FL","phoneNumber":"386-761-6071","email":"uumane4@multiply.com"}, -{"id":510,"firstName":"Alidia","lastName":"Kowalski","street":"3915 Harper Plaza","postalCode":"75221","city":"Dallas","state":"TX","email":"akowalskie5@simplemachines.org"}, -{"id":511,"firstName":"Willis","lastName":"Jeaneau","street":"8 Northport Center","postalCode":"37939","city":"Knoxville","state":"TN","phoneNumber":"865-336-2729","email":"wjeaneaue6@furl.net"}, -{"id":512,"firstName":"Clement","lastName":"Taudevin","street":"25062 Amoth Pass","postalCode":"31914","city":"Columbus","state":"GA","email":"ctaudevine7@mapquest.com"}, -{"id":513,"firstName":"Tally","lastName":"Arnatt","street":"5745 Nancy Terrace","postalCode":"95054","city":"Santa Clara","state":"CA","email":"tarnatte8@umich.edu"}, -{"id":514,"firstName":"Eldon","lastName":"Munnings","street":"17 Dayton Parkway","postalCode":"27690","city":"Raleigh","state":"NC","email":"emunningse9@gmpg.org"}, -{"id":515,"firstName":"Duffie","lastName":"Sibary","street":"840 Springview Avenue","postalCode":"48275","city":"Detroit","state":"MI","email":"dsibaryea@livejournal.com"}, -{"id":516,"firstName":"Winny","lastName":"Dobell","street":"0426 Lindbergh Street","postalCode":"81015","city":"Pueblo","state":"CO","phoneNumber":"719-882-3553","email":"wdobelleb@bizjournals.com"}, -{"id":517,"firstName":"Pancho","lastName":"Pointon","street":"79 Clyde Gallagher Park","postalCode":"97306","city":"Salem","state":"OR","phoneNumber":"503-151-2205"}, -{"id":518,"firstName":"Elston","lastName":"Warwicker","street":"96 Schmedeman Park","postalCode":"44705","city":"Canton","state":"OH","email":"ewarwickered@arstechnica.com"}, -{"id":519,"firstName":"Nicolle","lastName":"Shellcross","street":"23982 Cambridge Parkway","postalCode":"80940","city":"Colorado Springs","state":"CO","email":"nshellcrossee@hibu.com"}, -{"id":520,"firstName":"Bethanne","lastName":"Briggdale","street":"026 Portage Circle","postalCode":"43215","city":"Columbus","state":"OH","phoneNumber":"513-925-3139","email":"bbriggdaleef@flickr.com"}, -{"id":521,"firstName":"Elsey","lastName":"McCorry","street":"781 International Parkway","postalCode":"94286","city":"Sacramento","state":"CA","phoneNumber":"916-879-2104","email":"emccorryeg@sakura.ne.jp"}, -{"id":522,"firstName":"Abran","lastName":"Vasyuchov","street":"64 Grim Place","postalCode":"44177","city":"Cleveland","state":"OH"}, -{"id":523,"firstName":"Rhoda","lastName":"Grieveson","street":"50687 Towne Pass","postalCode":"11220","city":"Brooklyn","state":"NY","email":"rgrievesonei@mit.edu"}, -{"id":524,"firstName":"Florette","lastName":"Eke","street":"85057 Anzinger Lane","postalCode":"66225","city":"Shawnee Mission","state":"KS","phoneNumber":"913-299-0032","email":"fekeej@fema.gov"}, -{"id":525,"firstName":"Sheff","lastName":"Baigrie","street":"80366 Lawn Hill","postalCode":"02203","city":"Boston","state":"MA","phoneNumber":"617-556-4978","email":"sbaigrieek@aboutads.info"}, -{"id":526,"firstName":"Clarisse","lastName":"Hubbuck","street":"435 Truax Trail","postalCode":"02458","city":"Newton","state":"MA","phoneNumber":"781-641-2937"}, -{"id":527,"firstName":"Gilberte","lastName":"Yanele","street":"413 Glacier Hill Park","postalCode":"90610","city":"Whittier","state":"CA","phoneNumber":"562-451-1686","email":"gyaneleem@dot.gov"}, -{"id":528,"firstName":"Lefty","lastName":"Dufore","street":"957 Straubel Street","postalCode":"35220","city":"Birmingham","state":"AL","email":"lduforeen@slideshare.net"}, -{"id":529,"firstName":"Saul","lastName":"Shepperd","street":"44805 Sunnyside Place","postalCode":"32627","city":"Gainesville","state":"FL","phoneNumber":"352-904-7271"}, -{"id":530,"firstName":"Hadrian","lastName":"Cockhill","street":"479 Mayer Way","postalCode":"22119","city":"Merrifield","state":"VA","email":"hcockhillep@xrea.com"}, -{"id":531,"firstName":"Amalia","lastName":"Geare","street":"63075 Glendale Trail","postalCode":"90065","city":"Los Angeles","state":"CA","email":"ageareeq@vistaprint.com"}, -{"id":532,"firstName":"Adan","lastName":"Ibbeson","street":"5 Cambridge Lane","postalCode":"73142","city":"Oklahoma City","state":"OK"}, -{"id":533,"firstName":"Nicol","lastName":"Garbutt","street":"3 8th Street","postalCode":"50393","city":"Des Moines","state":"IA","phoneNumber":"515-946-8077"}, -{"id":534,"firstName":"Lilas","lastName":"Estcot","street":"1927 Mitchell Avenue","postalCode":"75185","city":"Mesquite","state":"TX","email":"lestcotet@ezinearticles.com"}, -{"id":535,"firstName":"Valina","lastName":"Dellenbrok","street":"1 Victoria Hill","postalCode":"45249","city":"Cincinnati","state":"OH","phoneNumber":"513-958-5055","email":"vdellenbrokeu@upenn.edu"}, -{"id":536,"firstName":"Gwen","lastName":"Harwell","street":"64275 Bartelt Terrace","postalCode":"93721","city":"Fresno","state":"CA"}, -{"id":537,"firstName":"Adriena","lastName":"Lochead","street":"0088 Hintze Point","postalCode":"43231","city":"Columbus","state":"OH","phoneNumber":"614-506-5616","email":"alocheadew@paypal.com"}, -{"id":538,"firstName":"Jacobo","lastName":"Jills","street":"809 Anderson Park","postalCode":"55557","city":"Young America","state":"MN","phoneNumber":"952-580-6574","email":"jjillsex@xing.com"}, -{"id":539,"firstName":"Saree","lastName":"Jeanequin","street":"0212 Clyde Gallagher Alley","postalCode":"32891","city":"Orlando","state":"FL","email":"sjeanequiney@who.int"}, -{"id":540,"firstName":"Kin","lastName":"Dewar","street":"3 Emmet Center","postalCode":"20244","city":"Washington","state":"DC","email":"kdewarez@discovery.com"}, -{"id":541,"firstName":"Kaleena","lastName":"Godfray","street":"4350 Eliot Parkway","postalCode":"76134","city":"Fort Worth","state":"TX","phoneNumber":"817-332-6412","email":"kgodfrayf0@webmd.com"}, -{"id":542,"firstName":"Wallace","lastName":"Poytres","street":"78157 Dovetail Crossing","postalCode":"14683","city":"Rochester","state":"NY","email":"wpoytresf1@springer.com"}, -{"id":543,"firstName":"Dur","lastName":"Burgise","street":"2 Weeping Birch Court","postalCode":"89130","city":"Las Vegas","state":"NV"}, -{"id":544,"firstName":"Sheridan","lastName":"Gardiner","street":"26 Gateway Crossing","postalCode":"64193","city":"Kansas City","state":"MO","phoneNumber":"816-647-4434","email":"sgardinerf3@jugem.jp"}, -{"id":545,"firstName":"Nickolaus","lastName":"Thomassen","street":"130 Anderson Drive","postalCode":"33330","city":"Fort Lauderdale","state":"FL","phoneNumber":"954-339-0290"}, -{"id":546,"firstName":"Boris","lastName":"Cortez","street":"55 Center Court","postalCode":"10184","city":"New York City","state":"NY","phoneNumber":"212-549-8414","email":"bcortezf5@mail.ru"}, -{"id":547,"firstName":"Candra","lastName":"Codner","street":"24078 Superior Point","postalCode":"93715","city":"Fresno","state":"CA","phoneNumber":"209-495-8135"}, -{"id":548,"firstName":"Ashton","lastName":"Hugin","street":"33 Fuller Place","postalCode":"63143","city":"Saint Louis","state":"MO"}, -{"id":549,"firstName":"Miguelita","lastName":"Lanceley","street":"34877 Arizona Street","postalCode":"80045","city":"Aurora","state":"CO","email":"mlanceleyf8@trellian.com"}, -{"id":550,"firstName":"Law","lastName":"Skim","street":"1795 Farmco Street","postalCode":"28230","city":"Charlotte","state":"NC","email":"lskimf9@bravesites.com"}, -{"id":551,"firstName":"Carlita","lastName":"Kindall","street":"7 Scofield Road","postalCode":"93709","city":"Fresno","state":"CA","email":"ckindallfa@zimbio.com"}, -{"id":552,"firstName":"Mehetabel","lastName":"Stawell","street":"648 Upham Plaza","postalCode":"75277","city":"Dallas","state":"TX","phoneNumber":"214-597-5958","email":"mstawellfb@ehow.com"}, -{"id":553,"firstName":"Charlena","lastName":"MacAlpyne","street":"2 Village Terrace","postalCode":"33758","city":"Clearwater","state":"FL","phoneNumber":"813-452-9764","email":"cmacalpynefc@xinhuanet.com"}, -{"id":554,"firstName":"Gayel","lastName":"Litel","street":"34782 Birchwood Road","postalCode":"46406","city":"Gary","state":"IN","phoneNumber":"219-156-8377","email":"glitelfd@alibaba.com"}, -{"id":555,"firstName":"Prisca","lastName":"Kanzler","street":"67 Miller Terrace","postalCode":"08619","city":"Trenton","state":"NJ","phoneNumber":"609-352-4487"}, -{"id":556,"firstName":"Marlowe","lastName":"Idenden","street":"396 Beilfuss Park","postalCode":"74103","city":"Tulsa","state":"OK","phoneNumber":"918-254-3102"}, -{"id":557,"firstName":"Ashley","lastName":"Skule","street":"2327 Valley Edge Terrace","postalCode":"93794","city":"Fresno","state":"CA","phoneNumber":"559-558-9123"}, -{"id":558,"firstName":"Trista","lastName":"Naptine","street":"646 Dahle Court","postalCode":"06538","city":"New Haven","state":"CT","phoneNumber":"203-257-3017","email":"tnaptinefh@hugedomains.com"}, -{"id":559,"firstName":"Hasheem","lastName":"Ottery","street":"004 Clemons Street","postalCode":"28815","city":"Asheville","state":"NC","phoneNumber":"828-768-3824","email":"hotteryfi@gmpg.org"}, -{"id":560,"firstName":"Alisa","lastName":"Bernhardt","street":"49 Cody Center","postalCode":"84120","city":"Salt Lake City","state":"UT","phoneNumber":"801-808-4005","email":"abernhardtfj@census.gov"}, -{"id":561,"firstName":"Isadora","lastName":"Hatchett","street":"78644 Hoepker Junction","postalCode":"77015","city":"Houston","state":"TX","email":"ihatchettfk@spiegel.de"}, -{"id":562,"firstName":"Valdemar","lastName":"Stithe","street":"75 East Street","postalCode":"48206","city":"Detroit","state":"MI","email":"vstithefl@marriott.com"}, -{"id":563,"firstName":"Elden","lastName":"Rebert","street":"2 Florence Place","postalCode":"65110","city":"Jefferson City","state":"MO","phoneNumber":"573-753-8030"}, -{"id":564,"firstName":"Stormie","lastName":"Trewartha","street":"59 Shoshone Lane","postalCode":"19136","city":"Philadelphia","state":"PA","phoneNumber":"215-466-6832"}, -{"id":565,"firstName":"Bernhard","lastName":"Boulsher","street":"50888 Dwight Drive","postalCode":"02114","city":"Boston","state":"MA","email":"bboulsherfo@zdnet.com"}, -{"id":566,"firstName":"Twyla","lastName":"Yerrill","street":"526 Clove Terrace","postalCode":"40745","city":"London","state":"KY","email":"tyerrillfp@smugmug.com"}, -{"id":567,"firstName":"Sullivan","lastName":"Dudeney","street":"953 Swallow Crossing","postalCode":"19160","city":"Philadelphia","state":"PA","email":"sdudeneyfq@kickstarter.com"}, -{"id":568,"firstName":"Estell","lastName":"Kiggel","street":"8170 Rusk Alley","postalCode":"20442","city":"Washington","state":"DC","phoneNumber":"202-645-5828","email":"ekiggelfr@imgur.com"}, -{"id":569,"firstName":"Jonis","lastName":"Pymer","street":"21296 International Pass","postalCode":"77844","city":"College Station","state":"TX","email":"jpymerfs@nymag.com"}, -{"id":570,"firstName":"Linea","lastName":"Cranmor","street":"2541 Thackeray Hill","postalCode":"31210","city":"Macon","state":"GA"}, -{"id":571,"firstName":"Starlin","lastName":"Reven","street":"7692 Mifflin Hill","postalCode":"66611","city":"Topeka","state":"KS","email":"srevenfu@nba.com"}, -{"id":572,"firstName":"Augusta","lastName":"Heustice","street":"947 Ramsey Lane","postalCode":"10292","city":"New York City","state":"NY","phoneNumber":"212-194-3346","email":"aheusticefv@cloudflare.com"}, -{"id":573,"firstName":"Glen","lastName":"O'Mailey","street":"90 6th Court","postalCode":"33982","city":"Punta Gorda","state":"FL","phoneNumber":"941-381-2231"}, -{"id":574,"firstName":"Astrix","lastName":"Bister","street":"505 Artisan Crossing","postalCode":"23324","city":"Chesapeake","state":"VA","phoneNumber":"757-469-4444","email":"abisterfx@uol.com.br"}, -{"id":575,"firstName":"Shaw","lastName":"Lidbetter","street":"70 New Castle Trail","postalCode":"10474","city":"Bronx","state":"NY","phoneNumber":"917-917-9173"}, -{"id":576,"firstName":"Yovonnda","lastName":"Wych","street":"97472 Derek Drive","postalCode":"90410","city":"Santa Monica","state":"CA","email":"ywychfz@symantec.com"}, -{"id":577,"firstName":"Harcourt","lastName":"Faier","street":"056 Northridge Street","postalCode":"16510","city":"Erie","state":"PA","email":"hfaierg0@cloudflare.com"}, -{"id":578,"firstName":"Archibold","lastName":"Kos","street":"6 Forster Park","postalCode":"63104","city":"Saint Louis","state":"MO","phoneNumber":"314-967-5566","email":"akosg1@soup.io"}, -{"id":579,"firstName":"Nataniel","lastName":"Beldom","street":"1 Sullivan Street","postalCode":"02453","city":"Waltham","state":"MA","email":"nbeldomg2@alibaba.com"}, -{"id":580,"firstName":"Felisha","lastName":"Bamfield","street":"970 Washington Avenue","postalCode":"12305","city":"Schenectady","state":"NY","email":"fbamfieldg3@jimdo.com"}, -{"id":581,"firstName":"Colly","lastName":"Rugge","street":"8 Golf Course Avenue","postalCode":"55172","city":"Saint Paul","state":"MN","phoneNumber":"651-450-9347","email":"cruggeg4@tmall.com"}, -{"id":582,"firstName":"Patti","lastName":"Maddrell","street":"0483 Coolidge Drive","postalCode":"74193","city":"Tulsa","state":"OK"}, -{"id":583,"firstName":"Antin","lastName":"Gabbetis","street":"93510 Clemons Drive","postalCode":"68583","city":"Lincoln","state":"NE","email":"agabbetisg6@java.com"}, -{"id":584,"firstName":"Bree","lastName":"Million","street":"3 Columbus Avenue","postalCode":"61614","city":"Peoria","state":"IL","phoneNumber":"309-360-1909","email":"bmilliong7@gnu.org"}, -{"id":585,"firstName":"Taber","lastName":"Lorait","street":"4 Melrose Way","postalCode":"62764","city":"Springfield","state":"IL","phoneNumber":"217-436-2021","email":"tloraitg8@cargocollective.com"}, -{"id":586,"firstName":"Roley","lastName":"Di Carlo","street":"981 Bowman Center","postalCode":"87505","city":"Santa Fe","state":"NM"}, -{"id":587,"firstName":"Seline","lastName":"Oxenham","street":"65051 Forest Run Center","postalCode":"94064","city":"Redwood City","state":"CA","email":"soxenhamga@fastcompany.com"}, -{"id":588,"firstName":"Costa","lastName":"Tomblin","street":"7 Arapahoe Alley","postalCode":"33315","city":"Fort Lauderdale","state":"FL","phoneNumber":"954-239-1335"}, -{"id":589,"firstName":"Opalina","lastName":"Cake","street":"88 Commercial Avenue","postalCode":"40215","city":"Louisville","state":"KY","email":"ocakegc@examiner.com"}, -{"id":590,"firstName":"Suzanne","lastName":"Giuroni","street":"73 Twin Pines Terrace","postalCode":"99260","city":"Spokane","state":"WA"}, -{"id":591,"firstName":"Faustine","lastName":"Croysdale","street":"01 Delladonna Point","postalCode":"48295","city":"Detroit","state":"MI"}, -{"id":592,"firstName":"Sheffie","lastName":"Aldine","street":"4 Hansons Junction","postalCode":"74108","city":"Tulsa","state":"OK"}, -{"id":593,"firstName":"Bret","lastName":"Birrane","street":"745 Mayer Junction","postalCode":"77030","city":"Houston","state":"TX","phoneNumber":"832-374-7571","email":"bbirranegg@opera.com"}, -{"id":594,"firstName":"Lennard","lastName":"Mowbury","street":"5 Dwight Road","postalCode":"94522","city":"Concord","state":"CA","email":"lmowburygh@1und1.de"}, -{"id":595,"firstName":"Albie","lastName":"Pert","street":"23705 Fieldstone Plaza","postalCode":"08922","city":"New Brunswick","state":"NJ","phoneNumber":"732-587-7312","email":"apertgi@netlog.com"}, -{"id":596,"firstName":"Stevie","lastName":"Pressnell","street":"0077 Ronald Regan Point","postalCode":"85020","city":"Phoenix","state":"AZ","phoneNumber":"623-991-0482","email":"spressnellgj@skype.com"}, -{"id":597,"firstName":"Eddy","lastName":"McIlreavy","street":"04 Luster Lane","postalCode":"94126","city":"San Francisco","state":"CA"}, -{"id":598,"firstName":"Webb","lastName":"Titterell","street":"94323 Kedzie Alley","postalCode":"91505","city":"Burbank","state":"CA","phoneNumber":"818-220-9105","email":"wtitterellgl@bandcamp.com"}, -{"id":599,"firstName":"Jeffrey","lastName":"Benito","street":"7487 Scott Lane","postalCode":"11470","city":"Jamaica","state":"NY","phoneNumber":"917-379-2592","email":"jbenitogm@deviantart.com"}, -{"id":600,"firstName":"Nollie","lastName":"Arsey","street":"7282 Summerview Plaza","postalCode":"55811","city":"Duluth","state":"MN","email":"narseygn@imageshack.us"}, -{"id":601,"firstName":"Petra","lastName":"Turpey","street":"43920 Evergreen Junction","postalCode":"77255","city":"Houston","state":"TX","phoneNumber":"713-446-0144"}, -{"id":602,"firstName":"Harwilll","lastName":"Lashbrook","street":"8063 Grasskamp Parkway","postalCode":"27621","city":"Raleigh","state":"NC","phoneNumber":"919-142-9887","email":"hlashbrookgp@seattletimes.com"}, -{"id":603,"firstName":"Tedman","lastName":"Steinor","street":"80230 Hanson Hill","postalCode":"47134","city":"Jeffersonville","state":"IN","email":"tsteinorgq@dmoz.org"}, -{"id":604,"firstName":"Georgette","lastName":"Tupper","street":"37 Lillian Avenue","postalCode":"33543","city":"Zephyrhills","state":"FL","phoneNumber":"813-743-2425","email":"gtuppergr@qq.com"}, -{"id":605,"firstName":"Torrance","lastName":"Welsh","street":"95802 Doe Crossing Crossing","postalCode":"13217","city":"Syracuse","state":"NY","phoneNumber":"315-145-4503","email":"twelshgs@imgur.com"}, -{"id":606,"firstName":"Silvie","lastName":"Souster","street":"52827 Fuller Place","postalCode":"99709","city":"Fairbanks","state":"AK"}, -{"id":607,"firstName":"Pauline","lastName":"Dulwitch","street":"8 Aberg Drive","postalCode":"17105","city":"Harrisburg","state":"PA","phoneNumber":"717-228-4960","email":"pdulwitchgu@aboutads.info"}, -{"id":608,"firstName":"Roberta","lastName":"Castanie","street":"182 Mosinee Avenue","postalCode":"75185","city":"Mesquite","state":"TX"}, -{"id":609,"firstName":"Percival","lastName":"Kristoffersen","street":"4 Del Mar Park","postalCode":"48335","city":"Farmington","state":"MI","phoneNumber":"248-438-1650","email":"pkristoffersengw@chron.com"}, -{"id":610,"firstName":"Caryl","lastName":"Boame","street":"094 Springview Avenue","postalCode":"78255","city":"San Antonio","state":"TX","email":"cboamegx@example.com"}, -{"id":611,"firstName":"Steve","lastName":"Simakov","street":"323 Brickson Park Trail","postalCode":"32244","city":"Jacksonville","state":"FL","phoneNumber":"904-468-9377","email":"ssimakovgy@angelfire.com"}, -{"id":612,"firstName":"Carl","lastName":"Tumayan","street":"93854 Clyde Gallagher Circle","postalCode":"98447","city":"Tacoma","state":"WA","email":"ctumayangz@1und1.de"}, -{"id":613,"firstName":"Gayle","lastName":"Blaker","street":"5930 Grasskamp Drive","postalCode":"12262","city":"Albany","state":"NY","email":"gblakerh0@spiegel.de"}, -{"id":614,"firstName":"Darrick","lastName":"Harefoot","street":"359 Waywood Trail","postalCode":"20189","city":"Dulles","state":"VA"}, -{"id":615,"firstName":"Sayer","lastName":"Eversfield","street":"86 Park Meadow Crossing","postalCode":"53263","city":"Milwaukee","state":"WI","email":"seversfieldh2@multiply.com"}, -{"id":616,"firstName":"Loralyn","lastName":"Poyner","street":"28530 Magdeline Crossing","postalCode":"84125","city":"Salt Lake City","state":"UT","phoneNumber":"801-363-2593"}, -{"id":617,"firstName":"Petrina","lastName":"Ridewood","street":"91782 Oriole Parkway","postalCode":"80235","city":"Denver","state":"CO","phoneNumber":"720-131-3660","email":"pridewoodh4@walmart.com"}, -{"id":618,"firstName":"Leroi","lastName":"Marde","street":"7992 Prairieview Junction","postalCode":"02142","city":"Cambridge","state":"MA","phoneNumber":"781-623-9420","email":"lmardeh5@oracle.com"}, -{"id":619,"firstName":"Brannon","lastName":"Janata","street":"79706 Wayridge Alley","postalCode":"24515","city":"Lynchburg","state":"VA","phoneNumber":"434-255-0721"}, -{"id":620,"firstName":"Berry","lastName":"Joska","street":"301 6th Alley","postalCode":"10150","city":"New York City","state":"NY","email":"bjoskah7@360.cn"}, -{"id":621,"firstName":"Blinnie","lastName":"Basten","street":"047 Canary Parkway","postalCode":"30343","city":"Atlanta","state":"GA","phoneNumber":"404-794-2760"}, -{"id":622,"firstName":"Inesita","lastName":"Abbitt","street":"8 Sachtjen Plaza","postalCode":"60681","city":"Chicago","state":"IL"}, -{"id":623,"firstName":"Nickie","lastName":"Ellicombe","street":"1067 Ridge Oak Terrace","postalCode":"38131","city":"Memphis","state":"TN","phoneNumber":"901-695-3826","email":"nellicombeha@imgur.com"}, -{"id":624,"firstName":"Barney","lastName":"Sheeres","street":"1 Rutledge Avenue","postalCode":"29208","city":"Columbia","state":"SC","phoneNumber":"803-166-1398"}, -{"id":625,"firstName":"Ogdan","lastName":"Lelievre","street":"27 Weeping Birch Plaza","postalCode":"27264","city":"High Point","state":"NC","phoneNumber":"336-416-3966","email":"olelievrehc@exblog.jp"}, -{"id":626,"firstName":"Zora","lastName":"Exter","street":"7 Ronald Regan Pass","postalCode":"33673","city":"Tampa","state":"FL"}, -{"id":627,"firstName":"Travus","lastName":"Jaulme","street":"3159 Montana Circle","postalCode":"79176","city":"Amarillo","state":"TX","phoneNumber":"806-894-9411"}, -{"id":628,"firstName":"Krishna","lastName":"Beckingham","street":"58 Fair Oaks Lane","postalCode":"30311","city":"Atlanta","state":"GA","email":"kbeckinghamhf@usnews.com"}, -{"id":629,"firstName":"Bartolomeo","lastName":"Bosanko","street":"753 Victoria Place","postalCode":"79699","city":"Abilene","state":"TX","phoneNumber":"325-223-9615","email":"bbosankohg@merriam-webster.com"}, -{"id":630,"firstName":"Umberto","lastName":"McGinly","street":"30 Upham Parkway","postalCode":"80945","city":"Colorado Springs","state":"CO","email":"umcginlyhh@cdc.gov"}, -{"id":631,"firstName":"Launce","lastName":"Fatkin","street":"03246 Esch Place","postalCode":"53779","city":"Madison","state":"WI","phoneNumber":"608-916-7032","email":"lfatkinhi@blogs.com"}, -{"id":632,"firstName":"Simone","lastName":"Soars","street":"9969 Forest Run Crossing","postalCode":"90101","city":"Los Angeles","state":"CA","phoneNumber":"213-282-8462"}, -{"id":633,"firstName":"Clerissa","lastName":"Leason","street":"59731 Mayfield Street","postalCode":"89510","city":"Reno","state":"NV"}, -{"id":634,"firstName":"Rutter","lastName":"Sultan","street":"697 Spenser Way","postalCode":"77245","city":"Houston","state":"TX"}, -{"id":635,"firstName":"Shannon","lastName":"De Carteret","street":"2 Grover Avenue","postalCode":"92717","city":"Irvine","state":"CA","phoneNumber":"714-410-2360","email":"sdecarterethm@simplemachines.org"}, -{"id":636,"firstName":"Sawyere","lastName":"Cardno","street":"428 Golf Course Drive","postalCode":"33111","city":"Miami","state":"FL"}, -{"id":637,"firstName":"Paulie","lastName":"Bucktharp","street":"5398 Sugar Park","postalCode":"10039","city":"New York City","state":"NY","phoneNumber":"646-197-4123","email":"pbucktharpho@businessweek.com"}, -{"id":638,"firstName":"Kippy","lastName":"Guisler","street":"2161 Claremont Trail","postalCode":"20546","city":"Washington","state":"DC","phoneNumber":"202-138-6171","email":"kguislerhp@ox.ac.uk"}, -{"id":639,"firstName":"Yoshiko","lastName":"Tolson","street":"2 Glendale Court","postalCode":"27415","city":"Greensboro","state":"NC","email":"ytolsonhq@example.com"}, -{"id":640,"firstName":"Page","lastName":"Chillingsworth","street":"8 Loomis Drive","postalCode":"55470","city":"Minneapolis","state":"MN","email":"pchillingsworthhr@wunderground.com"}, -{"id":641,"firstName":"Jillana","lastName":"O'Siaghail","street":"13517 Del Mar Road","postalCode":"29215","city":"Columbia","state":"SC","phoneNumber":"803-420-8597","email":"josiaghailhs@reuters.com"}, -{"id":642,"firstName":"Phedra","lastName":"Bagnold","street":"7059 Hallows Street","postalCode":"55470","city":"Minneapolis","state":"MN","email":"pbagnoldht@howstuffworks.com"}, -{"id":643,"firstName":"Bellina","lastName":"Gouldie","street":"7567 Bultman Way","postalCode":"88514","city":"El Paso","state":"TX","email":"bgouldiehu@salon.com"}, -{"id":644,"firstName":"Devi","lastName":"Bohden","street":"68833 Northview Hill","postalCode":"84115","city":"Salt Lake City","state":"UT"}, -{"id":645,"firstName":"Peggi","lastName":"Gobert","street":"667 Sauthoff Hill","postalCode":"44710","city":"Canton","state":"OH","email":"pgoberthw@mapy.cz"}, -{"id":646,"firstName":"Madelina","lastName":"Gurys","street":"70 Del Sol Trail","postalCode":"20420","city":"Washington","state":"DC","phoneNumber":"202-747-9276","email":"mguryshx@hibu.com"}, -{"id":647,"firstName":"Ikey","lastName":"Aubri","street":"76 Sutteridge Hill","postalCode":"36205","city":"Anniston","state":"AL","phoneNumber":"256-945-5095","email":"iaubrihy@mayoclinic.com"}, -{"id":648,"firstName":"Ginevra","lastName":"Duffitt","street":"25 Eagan Circle","postalCode":"31217","city":"Macon","state":"GA"}, -{"id":649,"firstName":"Cissiee","lastName":"Gozzard","street":"40240 Lillian Park","postalCode":"60609","city":"Chicago","state":"IL","email":"cgozzardi0@columbia.edu"}, -{"id":650,"firstName":"Sonny","lastName":"Jobern","street":"8 Green Trail","postalCode":"77065","city":"Houston","state":"TX","email":"sjoberni1@ucoz.com"}, -{"id":651,"firstName":"Mitch","lastName":"Guidera","street":"0 Dorton Junction","postalCode":"35210","city":"Birmingham","state":"AL","phoneNumber":"205-224-0177"}, -{"id":652,"firstName":"Dorey","lastName":"Marks","street":"81562 Maywood Crossing","postalCode":"71208","city":"Monroe","state":"LA","phoneNumber":"318-492-5487"}, -{"id":653,"firstName":"Pavla","lastName":"Conneely","street":"4007 Mifflin Lane","postalCode":"20456","city":"Washington","state":"DC"}, -{"id":654,"firstName":"Kym","lastName":"Gecks","street":"72638 Namekagon Plaza","postalCode":"61656","city":"Peoria","state":"IL","email":"kgecksi5@nature.com"}, -{"id":655,"firstName":"Prudence","lastName":"Peert","street":"91 Tomscot Parkway","postalCode":"32209","city":"Jacksonville","state":"FL","phoneNumber":"904-277-2945","email":"ppeerti6@usa.gov"}, -{"id":656,"firstName":"Elston","lastName":"Paolo","street":"4 Jenna Crossing","postalCode":"95155","city":"San Jose","state":"CA","email":"epaoloi7@umn.edu"}, -{"id":657,"firstName":"Indira","lastName":"Splaven","street":"8853 Vermont Drive","postalCode":"38188","city":"Memphis","state":"TN","phoneNumber":"901-706-3908","email":"isplaveni8@fda.gov"}, -{"id":658,"firstName":"Paul","lastName":"Mc Meekin","street":"56 Vidon Drive","postalCode":"08695","city":"Trenton","state":"NJ","phoneNumber":"609-361-1580"}, -{"id":659,"firstName":"Hadley","lastName":"Windmill","street":"31384 Evergreen Point","postalCode":"16550","city":"Erie","state":"PA","email":"hwindmillia@yale.edu"}, -{"id":660,"firstName":"Jay","lastName":"Yesichev","street":"675 Starling Pass","postalCode":"89150","city":"Las Vegas","state":"NV"}, -{"id":661,"firstName":"Ranna","lastName":"Dowtry","street":"303 Nevada Pass","postalCode":"48550","city":"Flint","state":"MI","phoneNumber":"810-164-4521","email":"rdowtryic@amazon.co.jp"}, -{"id":662,"firstName":"Annabel","lastName":"Pellamont","street":"277 Merrick Crossing","postalCode":"36605","city":"Mobile","state":"AL","phoneNumber":"251-595-3594","email":"apellamontid@reverbnation.com"}, -{"id":663,"firstName":"Kaitlynn","lastName":"Tracey","street":"612 Magdeline Road","postalCode":"97296","city":"Portland","state":"OR","email":"ktraceyie@ycombinator.com"}, -{"id":664,"firstName":"Matthiew","lastName":"Jills","street":"65 Walton Circle","postalCode":"93750","city":"Fresno","state":"CA","email":"mjillsif@addthis.com"}, -{"id":665,"firstName":"Bartlet","lastName":"Roe","street":"51573 Mandrake Park","postalCode":"02109","city":"Boston","state":"MA","phoneNumber":"617-460-5377","email":"broeig@nasa.gov"}, -{"id":666,"firstName":"Ban","lastName":"Knotton","street":"174 Westridge Parkway","postalCode":"32405","city":"Panama City","state":"FL","phoneNumber":"850-939-6502","email":"bknottonih@businesswire.com"}, -{"id":667,"firstName":"Cordelie","lastName":"O'Dee","street":"1733 Linden Avenue","postalCode":"80940","city":"Colorado Springs","state":"CO","phoneNumber":"719-966-3402","email":"codeeii@amazonaws.com"}, -{"id":668,"firstName":"Hardy","lastName":"Lob","street":"4 Bultman Road","postalCode":"75074","city":"Plano","state":"TX","email":"hlobij@dropbox.com"}, -{"id":669,"firstName":"Rosabelle","lastName":"Tonner","street":"1 Holy Cross Trail","postalCode":"36670","city":"Mobile","state":"AL","phoneNumber":"251-606-9437","email":"rtonnerik@google.ru"}, -{"id":670,"firstName":"Bernardina","lastName":"Mardy","street":"65 Myrtle Center","postalCode":"96845","city":"Honolulu","state":"HI","email":"bmardyil@wordpress.com"}, -{"id":671,"firstName":"Hynda","lastName":"Soldner","street":"88 Hazelcrest Drive","postalCode":"55470","city":"Minneapolis","state":"MN","email":"hsoldnerim@webeden.co.uk"}, -{"id":672,"firstName":"Quinn","lastName":"Templeton","street":"5 Village Way","postalCode":"19131","city":"Philadelphia","state":"PA","email":"qtempletonin@diigo.com"}, -{"id":673,"firstName":"Torrence","lastName":"Askwith","street":"1 Namekagon Point","postalCode":"31410","city":"Savannah","state":"GA","phoneNumber":"912-552-5239","email":"taskwithio@people.com.cn"}, -{"id":674,"firstName":"Bonnie","lastName":"Robilliard","street":"731 Johnson Lane","postalCode":"24515","city":"Lynchburg","state":"VA","phoneNumber":"434-382-5496"}, -{"id":675,"firstName":"Daphna","lastName":"D'Souza","street":"1549 Loftsgordon Center","postalCode":"91406","city":"Van Nuys","state":"CA","phoneNumber":"818-773-9088"}, -{"id":676,"firstName":"Palm","lastName":"Gandrich","street":"9 4th Pass","postalCode":"87121","city":"Albuquerque","state":"NM","phoneNumber":"505-815-5555"}, -{"id":677,"firstName":"Danie","lastName":"Gaydon","street":"382 Bayside Junction","postalCode":"55441","city":"Minneapolis","state":"MN","phoneNumber":"952-744-9400","email":"dgaydonis@seesaa.net"}, -{"id":678,"firstName":"Tabatha","lastName":"Caddock","street":"3858 Mccormick Road","postalCode":"53779","city":"Madison","state":"WI","phoneNumber":"608-996-7653","email":"tcaddockit@gizmodo.com"}, -{"id":679,"firstName":"Sergent","lastName":"Cade","street":"7 Riverside Crossing","postalCode":"13505","city":"Utica","state":"NY","email":"scadeiu@google.co.uk"}, -{"id":680,"firstName":"Shina","lastName":"Dumphry","street":"483 Del Mar Terrace","postalCode":"73109","city":"Oklahoma City","state":"OK","phoneNumber":"405-261-3364","email":"sdumphryiv@mediafire.com"}, -{"id":681,"firstName":"Aaron","lastName":"O'Neal","street":"669 Crowley Road","postalCode":"87140","city":"Albuquerque","state":"NM","phoneNumber":"505-451-6591","email":"aonealiw@npr.org"}, -{"id":682,"firstName":"Cynthea","lastName":"Wippermann","street":"109 Kinsman Parkway","postalCode":"06606","city":"Bridgeport","state":"CT","phoneNumber":"203-799-4552"}, -{"id":683,"firstName":"Stoddard","lastName":"Hullett","street":"06200 Mesta Park","postalCode":"78769","city":"Austin","state":"TX","phoneNumber":"512-190-7003"}, -{"id":684,"firstName":"Margit","lastName":"Comusso","street":"54 Springs Center","postalCode":"33737","city":"Saint Petersburg","state":"FL","phoneNumber":"727-144-3743","email":"mcomussoiz@drupal.org"}, -{"id":685,"firstName":"Dur","lastName":"Manns","street":"464 Park Meadow Road","postalCode":"90015","city":"Los Angeles","state":"CA","email":"dmannsj0@nymag.com"}, -{"id":686,"firstName":"Hollie","lastName":"Aldersey","street":"12195 Mallory Court","postalCode":"21405","city":"Annapolis","state":"MD","email":"halderseyj1@businessinsider.com"}, -{"id":687,"firstName":"Ralina","lastName":"Crepin","street":"13313 Clyde Gallagher Way","postalCode":"78285","city":"San Antonio","state":"TX"}, -{"id":688,"firstName":"Lyell","lastName":"Graveston","street":"20 Talisman Crossing","postalCode":"27157","city":"Winston Salem","state":"NC","phoneNumber":"336-638-3366","email":"lgravestonj3@webmd.com"}, -{"id":689,"firstName":"Anny","lastName":"Potell","street":"0 Ludington Circle","postalCode":"32803","city":"Orlando","state":"FL","email":"apotellj4@microsoft.com"}, -{"id":690,"firstName":"Harriot","lastName":"Klimpke","street":"8 Southridge Alley","postalCode":"22047","city":"Falls Church","state":"VA","phoneNumber":"571-470-2688","email":"hklimpkej5@slashdot.org"}, -{"id":691,"firstName":"Stacia","lastName":"Stainsby","street":"78 Mcbride Avenue","postalCode":"46862","city":"Fort Wayne","state":"IN"}, -{"id":692,"firstName":"Zacharia","lastName":"Willmont","street":"24 Everett Center","postalCode":"73135","city":"Oklahoma City","state":"OK","phoneNumber":"405-167-0584","email":"zwillmontj7@tuttocitta.it"}, -{"id":693,"firstName":"Dorelia","lastName":"Flexman","street":"0 Hauk Crossing","postalCode":"95298","city":"Stockton","state":"CA","phoneNumber":"209-759-3308"}, -{"id":694,"firstName":"Rubi","lastName":"Karran","street":"586 Eggendart Pass","postalCode":"64082","city":"Lees Summit","state":"MO","email":"rkarranj9@yahoo.com"}, -{"id":695,"firstName":"Edlin","lastName":"Davidsen","street":"5646 Arrowood Park","postalCode":"20591","city":"Washington","state":"DC","phoneNumber":"202-800-5817","email":"edavidsenja@purevolume.com"}, -{"id":696,"firstName":"Oralle","lastName":"Coneybeare","street":"0 Lakewood Parkway","postalCode":"08695","city":"Trenton","state":"NJ","email":"oconeybearejb@booking.com"}, -{"id":697,"firstName":"Scotti","lastName":"Cereceres","street":"2 Golf Hill","postalCode":"38119","city":"Memphis","state":"TN"}, -{"id":698,"firstName":"Hermione","lastName":"Mingotti","street":"14 Shoshone Alley","postalCode":"44511","city":"Youngstown","state":"OH","phoneNumber":"330-505-0585"}, -{"id":699,"firstName":"Janka","lastName":"Merredy","street":"877 Reinke Park","postalCode":"45233","city":"Cincinnati","state":"OH","email":"jmerredyje@furl.net"}, -{"id":700,"firstName":"Phillida","lastName":"Gannicleff","street":"48778 Sheridan Center","postalCode":"99210","city":"Spokane","state":"WA","email":"pgannicleffjf@github.io"}, -{"id":701,"firstName":"Bryn","lastName":"Shury","street":"82609 Surrey Road","postalCode":"78240","city":"San Antonio","state":"TX","phoneNumber":"210-361-9404","email":"bshuryjg@arstechnica.com"}, -{"id":702,"firstName":"Bobbe","lastName":"Yurocjhin","street":"54904 Southridge Parkway","postalCode":"33633","city":"Tampa","state":"FL","email":"byurocjhinjh@tumblr.com"}, -{"id":703,"firstName":"Noell","lastName":"Trewman","street":"63703 Fair Oaks Point","postalCode":"91520","city":"Burbank","state":"CA"}, -{"id":704,"firstName":"Adelind","lastName":"Marr","street":"68 Lotheville Park","postalCode":"02912","city":"Providence","state":"RI","email":"amarrjj@hexun.com"}, -{"id":705,"firstName":"Arabelle","lastName":"Oultram","street":"7927 Waxwing Place","postalCode":"77085","city":"Houston","state":"TX","email":"aoultramjk@diigo.com"}, -{"id":706,"firstName":"Derril","lastName":"Whylie","street":"1 Summerview Terrace","postalCode":"91606","city":"North Hollywood","state":"CA","phoneNumber":"323-244-3266","email":"dwhyliejl@auda.org.au"}, -{"id":707,"firstName":"Isadore","lastName":"Airth","street":"08897 Hauk Court","postalCode":"73104","city":"Oklahoma City","state":"OK","phoneNumber":"405-488-1807"}, -{"id":708,"firstName":"Barbara","lastName":"Feast","street":"420 Bayside Circle","postalCode":"63136","city":"Saint Louis","state":"MO","phoneNumber":"314-919-9094"}, -{"id":709,"firstName":"Engracia","lastName":"Laxtonne","street":"189 Oneill Center","postalCode":"22047","city":"Falls Church","state":"VA","email":"elaxtonnejo@addthis.com"}, -{"id":710,"firstName":"Dorice","lastName":"Dearle","street":"655 Union Way","postalCode":"47705","city":"Evansville","state":"IN","phoneNumber":"812-812-8795","email":"ddearlejp@mail.ru"}, -{"id":711,"firstName":"Crissie","lastName":"Leall","street":"1 1st Drive","postalCode":"36689","city":"Mobile","state":"AL","phoneNumber":"251-112-1542","email":"clealljq@nyu.edu"}, -{"id":712,"firstName":"Rica","lastName":"Wilshin","street":"0 Miller Way","postalCode":"79705","city":"Midland","state":"TX","phoneNumber":"432-935-1867"}, -{"id":713,"firstName":"Annie","lastName":"Thorns","street":"297 Thompson Park","postalCode":"32412","city":"Panama City","state":"FL","phoneNumber":"850-594-4049"}, -{"id":714,"firstName":"Lilah","lastName":"Beining","street":"1566 American Ash Avenue","postalCode":"25326","city":"Charleston","state":"WV","email":"lbeiningjt@mayoclinic.com"}, -{"id":715,"firstName":"Leeann","lastName":"Dorant","street":"5530 Mcguire Alley","postalCode":"93407","city":"San Luis Obispo","state":"CA","email":"ldorantju@homestead.com"}, -{"id":716,"firstName":"Elinor","lastName":"James","street":"2 Waxwing Terrace","postalCode":"88579","city":"El Paso","state":"TX","email":"ejamesjv@europa.eu"}, -{"id":717,"firstName":"Novelia","lastName":"Durman","street":"7 Hermina Junction","postalCode":"77050","city":"Houston","state":"TX","email":"ndurmanjw@fc2.com"}, -{"id":718,"firstName":"Sharai","lastName":"Pickervance","street":"739 Lien Junction","postalCode":"73167","city":"Oklahoma City","state":"OK","email":"spickervancejx@independent.co.uk"}, -{"id":719,"firstName":"Gilberte","lastName":"Stilling","street":"29950 Annamark Trail","postalCode":"89178","city":"Las Vegas","state":"NV","phoneNumber":"702-604-4240","email":"gstillingjy@feedburner.com"}, -{"id":720,"firstName":"Rosabelle","lastName":"Guinan","street":"13078 Sutherland Center","postalCode":"83757","city":"Boise","state":"ID","phoneNumber":"208-792-6705"}, -{"id":721,"firstName":"Karin","lastName":"Ackermann","street":"3 Susan Hill","postalCode":"48919","city":"Lansing","state":"MI","phoneNumber":"517-579-7811","email":"kackermannk0@csmonitor.com"}, -{"id":722,"firstName":"Reeta","lastName":"Attwell","street":"96 Alpine Junction","postalCode":"66622","city":"Topeka","state":"KS"}, -{"id":723,"firstName":"Dru","lastName":"Linck","street":"37 Wayridge Place","postalCode":"49505","city":"Grand Rapids","state":"MI","phoneNumber":"616-197-1837"}, -{"id":724,"firstName":"Frances","lastName":"Collingridge","street":"273 Ludington Crossing","postalCode":"77255","city":"Houston","state":"TX"}, -{"id":725,"firstName":"Wilmette","lastName":"Haimes","street":"8408 Shopko Circle","postalCode":"98907","city":"Yakima","state":"WA","phoneNumber":"509-821-5948"}, -{"id":726,"firstName":"Isahella","lastName":"Rubrow","street":"25 Melby Crossing","postalCode":"59105","city":"Billings","state":"MT","email":"irubrowk5@edublogs.org"}, -{"id":727,"firstName":"Walden","lastName":"Sappson","street":"1 3rd Hill","postalCode":"60435","city":"Joliet","state":"IL","email":"wsappsonk6@ameblo.jp"}, -{"id":728,"firstName":"Blondie","lastName":"Godehard.sf","street":"4606 Caliangt Circle","postalCode":"20709","city":"Laurel","state":"MD"}, -{"id":729,"firstName":"Dion","lastName":"Wingeatt","street":"098 Ridgeview Alley","postalCode":"78769","city":"Austin","state":"TX","phoneNumber":"512-948-4113","email":"dwingeattk8@clickbank.net"}, -{"id":730,"firstName":"Antoni","lastName":"Tibbles","street":"9 Muir Court","postalCode":"25313","city":"Charleston","state":"WV","phoneNumber":"304-298-6149","email":"atibblesk9@usa.gov"}, -{"id":731,"firstName":"Quinn","lastName":"McKevin","street":"063 Washington Parkway","postalCode":"55470","city":"Minneapolis","state":"MN","phoneNumber":"612-140-1997"}, -{"id":732,"firstName":"Rita","lastName":"Hallam","street":"4 Chive Court","postalCode":"85025","city":"Phoenix","state":"AZ","email":"rhallamkb@list-manage.com"}, -{"id":733,"firstName":"Cliff","lastName":"McCrum","street":"30841 Scoville Street","postalCode":"38150","city":"Memphis","state":"TN","phoneNumber":"901-983-7713","email":"cmccrumkc@yellowpages.com"}, -{"id":734,"firstName":"Allyson","lastName":"Petkov","street":"057 Grover Trail","postalCode":"55487","city":"Minneapolis","state":"MN","phoneNumber":"612-706-7185"}, -{"id":735,"firstName":"Tanney","lastName":"Cicccitti","street":"84959 Calypso Way","postalCode":"66629","city":"Topeka","state":"KS","phoneNumber":"785-516-0753","email":"tcicccittike@netscape.com"}, -{"id":736,"firstName":"Brendin","lastName":"Behnke","street":"3057 Browning Parkway","postalCode":"38181","city":"Memphis","state":"TN","email":"bbehnkekf@answers.com"}, -{"id":737,"firstName":"Sydelle","lastName":"Lestor","street":"6 Old Shore Way","postalCode":"73167","city":"Oklahoma City","state":"OK"}, -{"id":738,"firstName":"Nilson","lastName":"Nelthorp","street":"5 Gerald Trail","postalCode":"60567","city":"Naperville","state":"IL","phoneNumber":"630-718-5304","email":"nnelthorpkh@scribd.com"}, -{"id":739,"firstName":"Randy","lastName":"Boller","street":"64 Roth Junction","postalCode":"95354","city":"Modesto","state":"CA","phoneNumber":"209-795-8532","email":"rbollerki@nature.com"}, -{"id":740,"firstName":"Vicki","lastName":"De Vaan","street":"08 Mariners Cove Terrace","postalCode":"62776","city":"Springfield","state":"IL","email":"vdevaankj@disqus.com"}, -{"id":741,"firstName":"Romain","lastName":"Castri","street":"7 Atwood Road","postalCode":"02905","city":"Providence","state":"RI","phoneNumber":"401-865-9950","email":"rcastrikk@google.com.br"}, -{"id":742,"firstName":"Adlai","lastName":"Keppel","street":"6 Farragut Circle","postalCode":"76705","city":"Waco","state":"TX","phoneNumber":"254-852-6322"}, -{"id":743,"firstName":"Arlyne","lastName":"Whalley","street":"6 Esker Terrace","postalCode":"83727","city":"Boise","state":"ID","email":"awhalleykm@amazon.co.uk"}, -{"id":744,"firstName":"Alistair","lastName":"Jennins","street":"6 Loeprich Center","postalCode":"21684","city":"Ridgely","state":"MD","phoneNumber":"410-494-2201","email":"ajenninskn@sciencedaily.com"}, -{"id":745,"firstName":"Farr","lastName":"Steer","street":"8569 Eliot Lane","postalCode":"93381","city":"Bakersfield","state":"CA","phoneNumber":"661-416-1609","email":"fsteerko@usgs.gov"}, -{"id":746,"firstName":"Analise","lastName":"Balasini","street":"8901 Lyons Parkway","postalCode":"23242","city":"Richmond","state":"VA","email":"abalasinikp@imgur.com"}, -{"id":747,"firstName":"Gilbert","lastName":"Lockton","street":"3 Leroy Court","postalCode":"49018","city":"Battle Creek","state":"MI","email":"glocktonkq@google.nl"}, -{"id":748,"firstName":"Hamlen","lastName":"Massie","street":"469 Mallory Drive","postalCode":"77250","city":"Houston","state":"TX","email":"hmassiekr@admin.ch"}, -{"id":749,"firstName":"Ebony","lastName":"Loker","street":"21173 Raven Point","postalCode":"21265","city":"Baltimore","state":"MD"}, -{"id":750,"firstName":"Kristina","lastName":"Deeble","street":"479 Warner Park","postalCode":"92013","city":"Carlsbad","state":"CA","phoneNumber":"760-377-7198","email":"kdeeblekt@ezinearticles.com"}, -{"id":751,"firstName":"Jabez","lastName":"Mummery","street":"1 East Point","postalCode":"52809","city":"Davenport","state":"IA","email":"jmummeryku@sfgate.com"}, -{"id":752,"firstName":"Perrine","lastName":"Aldwinckle","street":"98 Montana Avenue","postalCode":"85030","city":"Phoenix","state":"AZ","phoneNumber":"602-224-2810","email":"paldwincklekv@eepurl.com"}, -{"id":753,"firstName":"Humfried","lastName":"Pendleton","street":"843 Swallow Park","postalCode":"89115","city":"Las Vegas","state":"NV","phoneNumber":"702-524-6047"}, -{"id":754,"firstName":"Dario","lastName":"Chesshire","street":"638 Westport Place","postalCode":"96845","city":"Honolulu","state":"HI","phoneNumber":"808-718-1386"}, -{"id":755,"firstName":"Cherianne","lastName":"Hearfield","street":"15 Quincy Street","postalCode":"14233","city":"Buffalo","state":"NY","email":"chearfieldky@technorati.com"}, -{"id":756,"firstName":"Jemima","lastName":"Oxnam","street":"22276 Maple Street","postalCode":"92165","city":"San Diego","state":"CA","email":"joxnamkz@addtoany.com"}, -{"id":757,"firstName":"Tedmund","lastName":"Chandler","street":"81 Katie Point","postalCode":"44310","city":"Akron","state":"OH","phoneNumber":"330-336-2279","email":"tchandlerl0@webeden.co.uk"}, -{"id":758,"firstName":"Tobie","lastName":"Risley","street":"82996 Reindahl Junction","postalCode":"17140","city":"Harrisburg","state":"PA","phoneNumber":"717-272-9110","email":"trisleyl1@youtu.be"}, -{"id":759,"firstName":"Tomi","lastName":"Crevagh","street":"91791 Buhler Park","postalCode":"33715","city":"Saint Petersburg","state":"FL"}, -{"id":760,"firstName":"Luce","lastName":"Gwatkin","street":"424 Lunder Crossing","postalCode":"31416","city":"Savannah","state":"GA"}, -{"id":761,"firstName":"Vinita","lastName":"Hannon","street":"90 Claremont Trail","postalCode":"39236","city":"Jackson","state":"MS"}, -{"id":762,"firstName":"Ruby","lastName":"O'Cosgra","street":"304 Dayton Avenue","postalCode":"07188","city":"Newark","state":"NJ"}, -{"id":763,"firstName":"Amandi","lastName":"Vasiltsov","street":"98188 Killdeer Alley","postalCode":"93399","city":"Bakersfield","state":"CA","email":"avasiltsovl6@smh.com.au"}, -{"id":764,"firstName":"Juliana","lastName":"Goldspink","street":"93 Maryland Terrace","postalCode":"06705","city":"Waterbury","state":"CT","email":"jgoldspinkl7@guardian.co.uk"}, -{"id":765,"firstName":"Giorgi","lastName":"Yakovl","street":"24240 Shasta Drive","postalCode":"46814","city":"Fort Wayne","state":"IN","phoneNumber":"260-754-5907"}, -{"id":766,"firstName":"Aleksandr","lastName":"Justun","street":"06 Fulton Terrace","postalCode":"85025","city":"Phoenix","state":"AZ"}, -{"id":767,"firstName":"Cornela","lastName":"Grindell","street":"1 Hazelcrest Lane","postalCode":"53285","city":"Milwaukee","state":"WI"}, -{"id":768,"firstName":"Liv","lastName":"Madrell","street":"623 Cordelia Terrace","postalCode":"17105","city":"Harrisburg","state":"PA","email":"lmadrelllb@1688.com"}, -{"id":769,"firstName":"Konstance","lastName":"Rosebotham","street":"8930 Utah Terrace","postalCode":"20029","city":"Washington","state":"DC","email":"krosebothamlc@studiopress.com"}, -{"id":770,"firstName":"Theo","lastName":"Scotland","street":"454 Hintze Park","postalCode":"45238","city":"Cincinnati","state":"OH"}, -{"id":771,"firstName":"Trefor","lastName":"Rein","street":"9 Redwing Plaza","postalCode":"22184","city":"Vienna","state":"VA","email":"treinle@barnesandnoble.com"}, -{"id":772,"firstName":"Angelina","lastName":"Bromehead","street":"62477 Walton Circle","postalCode":"14683","city":"Rochester","state":"NY","email":"abromeheadlf@php.net"}, -{"id":773,"firstName":"Thornie","lastName":"Ivanishin","street":"0 Sunbrook Court","postalCode":"34665","city":"Pinellas Park","state":"FL","email":"tivanishinlg@aol.com"}, -{"id":774,"firstName":"Dyana","lastName":"McNickle","street":"2696 Lakewood Gardens Pass","postalCode":"20456","city":"Washington","state":"DC","phoneNumber":"202-653-8740"}, -{"id":775,"firstName":"Humfried","lastName":"Suero","street":"643 Pearson Junction","postalCode":"28410","city":"Wilmington","state":"NC"}, -{"id":776,"firstName":"Jessamine","lastName":"Stockings","street":"739 Moose Street","postalCode":"94137","city":"San Francisco","state":"CA","phoneNumber":"415-641-0091","email":"jstockingslj@skype.com"}, -{"id":777,"firstName":"Laryssa","lastName":"Grahl","street":"0538 Bultman Point","postalCode":"81505","city":"Grand Junction","state":"CO"}, -{"id":778,"firstName":"Susan","lastName":"Stonnell","street":"7 Dennis Parkway","postalCode":"67215","city":"Wichita","state":"KS","phoneNumber":"316-966-3243","email":"sstonnellll@nps.gov"}, -{"id":779,"firstName":"Melinde","lastName":"Segoe","street":"9 Dottie Place","postalCode":"19125","city":"Philadelphia","state":"PA","phoneNumber":"215-119-3801"}, -{"id":780,"firstName":"Skip","lastName":"Sedgebeer","street":"1 Eliot Drive","postalCode":"20005","city":"Washington","state":"DC","email":"ssedgebeerln@blogtalkradio.com"}, -{"id":781,"firstName":"Annabel","lastName":"Schusterl","street":"6094 Talisman Lane","postalCode":"68510","city":"Lincoln","state":"NE","phoneNumber":"402-355-7934","email":"aschusterllo@cargocollective.com"}, -{"id":782,"firstName":"Emiline","lastName":"Whittlesey","street":"5 Claremont Lane","postalCode":"77040","city":"Houston","state":"TX","phoneNumber":"832-835-1321","email":"ewhittleseylp@geocities.com"}, -{"id":783,"firstName":"Frasquito","lastName":"Loukes","street":"47 Merchant Pass","postalCode":"27499","city":"Greensboro","state":"NC","phoneNumber":"336-265-5719","email":"floukeslq@google.it"}, -{"id":784,"firstName":"Jerald","lastName":"Fairholm","street":"5939 Mariners Cove Road","postalCode":"76598","city":"Gatesville","state":"TX","email":"jfairholmlr@smh.com.au"}, -{"id":785,"firstName":"Melisent","lastName":"Strange","street":"50 Glendale Trail","postalCode":"10606","city":"White Plains","state":"NY"}, -{"id":786,"firstName":"Aaron","lastName":"Mixter","street":"14347 Darwin Place","postalCode":"33124","city":"Miami","state":"FL","phoneNumber":"786-244-1856","email":"amixterlt@dmoz.org"}, -{"id":787,"firstName":"Margy","lastName":"Falla","street":"5 Caliangt Trail","postalCode":"40287","city":"Louisville","state":"KY","email":"mfallalu@booking.com"}, -{"id":788,"firstName":"Malinde","lastName":"Ashdown","street":"97234 Anniversary Hill","postalCode":"06152","city":"Hartford","state":"CT","phoneNumber":"860-140-7408","email":"mashdownlv@economist.com"}, -{"id":789,"firstName":"Carolynn","lastName":"Dulany","street":"33 Melby Road","postalCode":"74116","city":"Tulsa","state":"OK","phoneNumber":"918-140-7039","email":"cdulanylw@yelp.com"}, -{"id":790,"firstName":"Kissee","lastName":"Escale","street":"1470 Hanson Parkway","postalCode":"92812","city":"Anaheim","state":"CA","phoneNumber":"714-466-6376"}, -{"id":791,"firstName":"Rebeka","lastName":"Moralee","street":"898 Oak Street","postalCode":"34108","city":"Naples","state":"FL","email":"rmoraleely@shutterfly.com"}, -{"id":792,"firstName":"Cort","lastName":"Arter","street":"35039 Menomonie Way","postalCode":"50936","city":"Des Moines","state":"IA","email":"carterlz@surveymonkey.com"}, -{"id":793,"firstName":"Kirsteni","lastName":"Heady","street":"473 Lawn Street","postalCode":"32092","city":"Saint Augustine","state":"FL","phoneNumber":"904-424-3526","email":"kheadym0@usda.gov"}, -{"id":794,"firstName":"Ettie","lastName":"Overil","street":"1085 Waubesa Lane","postalCode":"18105","city":"Allentown","state":"PA"}, -{"id":795,"firstName":"Evey","lastName":"Tesimon","street":"9 Cordelia Place","postalCode":"55127","city":"Saint Paul","state":"MN"}, -{"id":796,"firstName":"Hersh","lastName":"Lebond","street":"5265 Bartelt Park","postalCode":"34282","city":"Bradenton","state":"FL","phoneNumber":"941-114-7090"}, -{"id":797,"firstName":"Hendrika","lastName":"Govan","street":"27747 La Follette Avenue","postalCode":"21229","city":"Baltimore","state":"MD","email":"hgovanm4@cam.ac.uk"}, -{"id":798,"firstName":"Renado","lastName":"Hambly","street":"5211 Schmedeman Drive","postalCode":"68105","city":"Omaha","state":"NE","phoneNumber":"402-183-0376","email":"rhamblym5@netlog.com"}, -{"id":799,"firstName":"Brewer","lastName":"Boyn","street":"3161 Novick Lane","postalCode":"77055","city":"Houston","state":"TX","email":"bboynm6@google.it"}, -{"id":800,"firstName":"Patrick","lastName":"Speck","street":"57052 Ronald Regan Way","postalCode":"30306","city":"Atlanta","state":"GA","phoneNumber":"770-764-6971","email":"pspeckm7@live.com"}, -{"id":801,"firstName":"Skipper","lastName":"Conybear","street":"75 Autumn Leaf Alley","postalCode":"79968","city":"El Paso","state":"TX","phoneNumber":"915-705-5594","email":"sconybearm8@jimdo.com"}, -{"id":802,"firstName":"Elmore","lastName":"Quilty","street":"027 Warbler Court","postalCode":"35210","city":"Birmingham","state":"AL","email":"equiltym9@ebay.co.uk"}, -{"id":803,"firstName":"Estella","lastName":"Jorck","street":"52695 Holy Cross Trail","postalCode":"47134","city":"Jeffersonville","state":"IN","email":"ejorckma@bluehost.com"}, -{"id":804,"firstName":"Scotti","lastName":"Goodale","street":"7551 Dottie Pass","postalCode":"77713","city":"Beaumont","state":"TX","email":"sgoodalemb@nba.com"}, -{"id":805,"firstName":"Catha","lastName":"Shekle","street":"38839 Derek Terrace","postalCode":"62718","city":"Springfield","state":"IL","email":"csheklemc@tmall.com"}, -{"id":806,"firstName":"Clemens","lastName":"Chuter","street":"015 Charing Cross Pass","postalCode":"30306","city":"Atlanta","state":"GA"}, -{"id":807,"firstName":"Kiley","lastName":"Vasiltsov","street":"8 Reindahl Hill","postalCode":"33432","city":"Boca Raton","state":"FL","email":"kvasiltsovme@google.nl"}, -{"id":808,"firstName":"Korrie","lastName":"McGauhy","street":"188 Golf Lane","postalCode":"89110","city":"Las Vegas","state":"NV","phoneNumber":"702-647-1620","email":"kmcgauhymf@goodreads.com"}, -{"id":809,"firstName":"Giustina","lastName":"Hentze","street":"62244 Roth Way","postalCode":"48604","city":"Saginaw","state":"MI","email":"ghentzemg@pcworld.com"}, -{"id":810,"firstName":"Emilia","lastName":"Virgoe","street":"13910 Alpine Lane","postalCode":"33994","city":"Fort Myers","state":"FL","phoneNumber":"239-993-2041","email":"evirgoemh@mediafire.com"}, -{"id":811,"firstName":"Gordan","lastName":"Trimming","street":"38168 Transport Avenue","postalCode":"38131","city":"Memphis","state":"TN","email":"gtrimmingmi@spiegel.de"}, -{"id":812,"firstName":"Tadeo","lastName":"Vannoort","street":"41476 Pond Alley","postalCode":"20851","city":"Rockville","state":"MD","phoneNumber":"240-432-6489","email":"tvannoortmj@privacy.gov.au"}, -{"id":813,"firstName":"Joseito","lastName":"Viant","street":"1390 Kropf Court","postalCode":"04109","city":"Portland","state":"ME"}, -{"id":814,"firstName":"Blake","lastName":"Tailby","street":"5 Bultman Terrace","postalCode":"31914","city":"Columbus","state":"GA"}, -{"id":815,"firstName":"Cynthie","lastName":"Victor","street":"64 Hoard Avenue","postalCode":"46221","city":"Indianapolis","state":"IN","phoneNumber":"317-836-2511","email":"cvictormm@bizjournals.com"}, -{"id":816,"firstName":"Kristoforo","lastName":"Luckman","street":"019 Ohio Avenue","postalCode":"58505","city":"Bismarck","state":"ND","phoneNumber":"701-921-3472"}, -{"id":817,"firstName":"Celinka","lastName":"Brakewell","street":"5702 Tennessee Pass","postalCode":"92612","city":"Irvine","state":"CA","phoneNumber":"714-584-5599","email":"cbrakewellmo@house.gov"}, -{"id":818,"firstName":"Analiese","lastName":"Debenham","street":"7 Straubel Pass","postalCode":"31704","city":"Albany","state":"GA","phoneNumber":"229-600-4384","email":"adebenhammp@dell.com"}, -{"id":819,"firstName":"Sebastiano","lastName":"Eskriett","street":"0 Northridge Pass","postalCode":"34114","city":"Naples","state":"FL","phoneNumber":"239-651-1326","email":"seskriettmq@berkeley.edu"}, -{"id":820,"firstName":"Jermaine","lastName":"Donisthorpe","street":"69319 Hollow Ridge Park","postalCode":"62794","city":"Springfield","state":"IL","phoneNumber":"217-510-3030","email":"jdonisthorpemr@istockphoto.com"}, -{"id":821,"firstName":"Tera","lastName":"Smalecombe","street":"646 Oakridge Avenue","postalCode":"43699","city":"Toledo","state":"OH","email":"tsmalecombems@tripod.com"}, -{"id":822,"firstName":"Issie","lastName":"Cohane","street":"79078 Fair Oaks Circle","postalCode":"40233","city":"Louisville","state":"KY","email":"icohanemt@wired.com"}, -{"id":823,"firstName":"Nanete","lastName":"Erb","street":"02 Truax Place","postalCode":"88563","city":"El Paso","state":"TX","phoneNumber":"915-234-2792"}, -{"id":824,"firstName":"Benetta","lastName":"Roger","street":"822 Fallview Alley","postalCode":"33625","city":"Tampa","state":"FL","phoneNumber":"813-715-8911","email":"brogermv@ca.gov"}, -{"id":825,"firstName":"Sascha","lastName":"Hillyatt","street":"06 Fisk Plaza","postalCode":"11407","city":"Jamaica","state":"NY"}, -{"id":826,"firstName":"Britt","lastName":"Gilderoy","street":"64312 Delaware Place","postalCode":"89135","city":"Las Vegas","state":"NV"}, -{"id":827,"firstName":"Sterne","lastName":"Frissell","street":"69121 Sycamore Way","postalCode":"06912","city":"Stamford","state":"CT"}, -{"id":828,"firstName":"Lonny","lastName":"Petersen","street":"6 Golf Course Crossing","postalCode":"32627","city":"Gainesville","state":"FL","phoneNumber":"352-245-3289","email":"lpetersenmz@msu.edu"}, -{"id":829,"firstName":"Maridel","lastName":"Clunie","street":"0312 Dryden Street","postalCode":"80328","city":"Boulder","state":"CO","phoneNumber":"303-848-1116","email":"mclunien0@china.com.cn"}, -{"id":830,"firstName":"Annabal","lastName":"Pruckner","street":"98481 Anhalt Pass","postalCode":"30340","city":"Atlanta","state":"GA","email":"aprucknern1@bandcamp.com"}, -{"id":831,"firstName":"Carin","lastName":"Ambrois","street":"7982 Vahlen Road","postalCode":"85010","city":"Phoenix","state":"AZ"}, -{"id":832,"firstName":"Consuela","lastName":"Grubey","street":"1 Lillian Circle","postalCode":"89714","city":"Carson City","state":"NV","email":"cgrubeyn3@google.pl"}, -{"id":833,"firstName":"Friedrick","lastName":"Ventom","street":"703 Almo Crossing","postalCode":"43215","city":"Columbus","state":"OH"}, -{"id":834,"firstName":"Shalom","lastName":"Rosten","street":"4460 Parkside Road","postalCode":"37215","city":"Nashville","state":"TN","email":"srostenn5@e-recht24.de"}, -{"id":835,"firstName":"Sofia","lastName":"Pottie","street":"89885 Golf Course Junction","postalCode":"27635","city":"Raleigh","state":"NC","email":"spottien6@weather.com"}, -{"id":836,"firstName":"Ed","lastName":"Cecely","street":"38576 Gina Trail","postalCode":"85305","city":"Glendale","state":"AZ","email":"ececelyn7@friendfeed.com"}, -{"id":837,"firstName":"Ruthann","lastName":"Bignold","street":"202 Monterey Alley","postalCode":"19104","city":"Philadelphia","state":"PA","phoneNumber":"610-892-3949"}, -{"id":838,"firstName":"Vonnie","lastName":"Leeming","street":"5 Farmco Center","postalCode":"18706","city":"Wilkes Barre","state":"PA"}, -{"id":839,"firstName":"Diandra","lastName":"Gredden","street":"68178 Parkside Hill","postalCode":"89120","city":"Las Vegas","state":"NV","phoneNumber":"702-952-4026"}, -{"id":840,"firstName":"Donny","lastName":"Bruckent","street":"6 Dapin Way","postalCode":"98127","city":"Seattle","state":"WA","email":"dbruckentnb@stumbleupon.com"}, -{"id":841,"firstName":"Mill","lastName":"Finlay","street":"9 Meadow Valley Terrace","postalCode":"94405","city":"San Mateo","state":"CA","email":"mfinlaync@hibu.com"}, -{"id":842,"firstName":"Garv","lastName":"Feldberger","street":"5916 Marquette Lane","postalCode":"98127","city":"Seattle","state":"WA"}, -{"id":843,"firstName":"Micheal","lastName":"Favela","street":"41587 Dunning Road","postalCode":"47712","city":"Evansville","state":"IN"}, -{"id":844,"firstName":"Shannon","lastName":"Alvaro","street":"86377 Becker Avenue","postalCode":"33315","city":"Fort Lauderdale","state":"FL","phoneNumber":"954-661-6648","email":"salvaronf@usa.gov"}, -{"id":845,"firstName":"Corenda","lastName":"Aldcorn","street":"19 Bowman Court","postalCode":"67220","city":"Wichita","state":"KS","phoneNumber":"316-835-1638","email":"caldcornng@ebay.com"}, -{"id":846,"firstName":"Alvy","lastName":"Mahood","street":"0814 Spohn Hill","postalCode":"50347","city":"Des Moines","state":"IA","phoneNumber":"515-865-3669","email":"amahoodnh@toplist.cz"}, -{"id":847,"firstName":"Alexandr","lastName":"Stut","street":"8672 Anderson Court","postalCode":"78410","city":"Corpus Christi","state":"TX"}, -{"id":848,"firstName":"Gale","lastName":"Chaperling","street":"78873 Bellgrove Alley","postalCode":"10009","city":"New York City","state":"NY","phoneNumber":"212-978-6798","email":"gchaperlingnj@livejournal.com"}, -{"id":849,"firstName":"Eunice","lastName":"Dadson","street":"340 Dwight Hill","postalCode":"52809","city":"Davenport","state":"IA","phoneNumber":"563-787-9869","email":"edadsonnk@businessinsider.com"}, -{"id":850,"firstName":"Florentia","lastName":"Camin","street":"68733 Orin Point","postalCode":"46867","city":"Fort Wayne","state":"IN","phoneNumber":"260-920-3928","email":"fcaminnl@technorati.com"}, -{"id":851,"firstName":"Norina","lastName":"Vannacci","street":"585 Karstens Circle","postalCode":"45233","city":"Cincinnati","state":"OH"}, -{"id":852,"firstName":"Syd","lastName":"Gianolo","street":"99755 Arrowood Hill","postalCode":"33673","city":"Tampa","state":"FL","phoneNumber":"813-878-8150","email":"sgianolonn@uol.com.br"}, -{"id":853,"firstName":"Timofei","lastName":"Serle","street":"1081 Cascade Park","postalCode":"94257","city":"Sacramento","state":"CA","email":"tserleno@behance.net"}, -{"id":854,"firstName":"Moina","lastName":"Ciobutaro","street":"502 Stone Corner Circle","postalCode":"33018","city":"Hialeah","state":"FL","email":"mciobutaronp@ycombinator.com"}, -{"id":855,"firstName":"Nikolaos","lastName":"Gavaghan","street":"47136 Golf Junction","postalCode":"97255","city":"Portland","state":"OR"}, -{"id":856,"firstName":"Gallard","lastName":"Jenks","street":"2 Carioca Terrace","postalCode":"35263","city":"Birmingham","state":"AL","email":"gjenksnr@blogtalkradio.com"}, -{"id":857,"firstName":"Dare","lastName":"Nielson","street":"3 Carberry Hill","postalCode":"48604","city":"Saginaw","state":"MI","phoneNumber":"989-211-0944"}, -{"id":858,"firstName":"Cecilius","lastName":"Fasse","street":"1 Novick Street","postalCode":"68583","city":"Lincoln","state":"NE","phoneNumber":"402-342-4624","email":"cfassent@zimbio.com"}, -{"id":859,"firstName":"Kevon","lastName":"Doxsey","street":"152 Warrior Pass","postalCode":"91616","city":"North Hollywood","state":"CA","phoneNumber":"213-339-9582"}, -{"id":860,"firstName":"Matti","lastName":"Gras","street":"4567 Bunting Way","postalCode":"94544","city":"Hayward","state":"CA"}, -{"id":861,"firstName":"Nathan","lastName":"Longfut","street":"3178 Mockingbird Alley","postalCode":"97255","city":"Portland","state":"OR","phoneNumber":"971-206-3004"}, -{"id":862,"firstName":"Willetta","lastName":"Fitzpayn","street":"87 Alpine Drive","postalCode":"48604","city":"Saginaw","state":"MI","phoneNumber":"989-698-7578","email":"wfitzpaynnx@geocities.jp"}, -{"id":863,"firstName":"Emanuel","lastName":"Jikylls","street":"42 Heffernan Court","postalCode":"33884","city":"Winter Haven","state":"FL","email":"ejikyllsny@biglobe.ne.jp"}, -{"id":864,"firstName":"Lenard","lastName":"Nore","street":"7 Nevada Avenue","postalCode":"77343","city":"Huntsville","state":"TX","phoneNumber":"936-267-6742","email":"lnorenz@netscape.com"}, -{"id":865,"firstName":"Jeanine","lastName":"MacTurlough","street":"26343 Gale Crossing","postalCode":"53779","city":"Madison","state":"WI","phoneNumber":"608-865-6630","email":"jmacturlougho0@scientificamerican.com"}, -{"id":866,"firstName":"Jaquenetta","lastName":"Dorn","street":"3963 Novick Way","postalCode":"19495","city":"Valley Forge","state":"PA","email":"jdorno1@about.com"}, -{"id":867,"firstName":"Amity","lastName":"Titterrell","street":"3216 Lindbergh Court","postalCode":"90071","city":"Los Angeles","state":"CA","phoneNumber":"626-416-1494","email":"atitterrello2@psu.edu"}, -{"id":868,"firstName":"Rafaelia","lastName":"Melly","street":"6 Westridge Center","postalCode":"61825","city":"Champaign","state":"IL","email":"rmellyo3@ovh.net"}, -{"id":869,"firstName":"Cordi","lastName":"Martinovsky","street":"38 Forest Dale Terrace","postalCode":"50362","city":"Des Moines","state":"IA","email":"cmartinovskyo4@tuttocitta.it"}, -{"id":870,"firstName":"Humfrid","lastName":"Varne","street":"858 Farwell Street","postalCode":"06127","city":"West Hartford","state":"CT","email":"hvarneo5@yolasite.com"}, -{"id":871,"firstName":"Ford","lastName":"Pinchback","street":"363 Lien Pass","postalCode":"20599","city":"Washington","state":"DC","email":"fpinchbacko6@nytimes.com"}, -{"id":872,"firstName":"Maible","lastName":"Haresign","street":"809 Monica Point","postalCode":"28230","city":"Charlotte","state":"NC"}, -{"id":873,"firstName":"Rozamond","lastName":"Challis","street":"312 Mcbride Plaza","postalCode":"77266","city":"Houston","state":"TX","email":"rchalliso8@google.ca"}, -{"id":874,"firstName":"Myrah","lastName":"Menendez","street":"21 Garrison Plaza","postalCode":"23208","city":"Richmond","state":"VA","email":"mmenendezo9@msn.com"}, -{"id":875,"firstName":"Roberto","lastName":"Lamb","street":"3339 Cottonwood Pass","postalCode":"43699","city":"Toledo","state":"OH","phoneNumber":"419-633-9671"}, -{"id":876,"firstName":"Foster","lastName":"Delyth","street":"91500 Carpenter Point","postalCode":"79928","city":"El Paso","state":"TX","phoneNumber":"915-782-9005"}, -{"id":877,"firstName":"Nicholle","lastName":"Pickring","street":"8083 Talmadge Lane","postalCode":"14624","city":"Rochester","state":"NY","email":"npickringoc@tuttocitta.it"}, -{"id":878,"firstName":"Theodosia","lastName":"Bayliss","street":"6 Marcy Parkway","postalCode":"33954","city":"Port Charlotte","state":"FL"}, -{"id":879,"firstName":"Araldo","lastName":"Dowzell","street":"8376 Carpenter Court","postalCode":"71151","city":"Shreveport","state":"LA","email":"adowzelloe@army.mil"}, -{"id":880,"firstName":"Hugues","lastName":"McColgan","street":"990 Southridge Point","postalCode":"93591","city":"Palmdale","state":"CA","phoneNumber":"661-978-2646","email":"hmccolganof@netvibes.com"}, -{"id":881,"firstName":"Annissa","lastName":"Mordue","street":"62114 Ludington Lane","postalCode":"30911","city":"Augusta","state":"GA","phoneNumber":"706-152-3967","email":"amordueog@tripod.com"}, -{"id":882,"firstName":"Tierney","lastName":"Claughton","street":"3 Twin Pines Trail","postalCode":"88563","city":"El Paso","state":"TX","phoneNumber":"915-784-7980"}, -{"id":883,"firstName":"Rey","lastName":"Fleckno","street":"49 Oakridge Point","postalCode":"27605","city":"Raleigh","state":"NC"}, -{"id":884,"firstName":"Stacee","lastName":"Rewcastle","street":"19 Glendale Point","postalCode":"78278","city":"San Antonio","state":"TX","phoneNumber":"210-454-3087","email":"srewcastleoj@ustream.tv"}, -{"id":885,"firstName":"Delano","lastName":"Bragger","street":"0 Hoffman Center","postalCode":"47725","city":"Evansville","state":"IN","email":"dbraggerok@ifeng.com"}, -{"id":886,"firstName":"Redford","lastName":"Bare","street":"801 Garrison Court","postalCode":"08638","city":"Trenton","state":"NJ"}, -{"id":887,"firstName":"Grantham","lastName":"Arlidge","street":"69 Shelley Parkway","postalCode":"34210","city":"Bradenton","state":"FL","email":"garlidgeom@google.nl"}, -{"id":888,"firstName":"Debbie","lastName":"Tommaseo","street":"295 Crowley Alley","postalCode":"98516","city":"Olympia","state":"WA","email":"dtommaseoon@xrea.com"}, -{"id":889,"firstName":"Ragnar","lastName":"O' Byrne","street":"88163 Manitowish Terrace","postalCode":"20260","city":"Washington","state":"DC","phoneNumber":"202-982-3050","email":"robyrneoo@ft.com"}, -{"id":890,"firstName":"Leopold","lastName":"Woodington","street":"44 Vera Pass","postalCode":"24009","city":"Roanoke","state":"VA","email":"lwoodingtonop@engadget.com"}, -{"id":891,"firstName":"Farrah","lastName":"Conniam","street":"2078 Bunting Parkway","postalCode":"68134","city":"Omaha","state":"NE","email":"fconniamoq@github.com"}, -{"id":892,"firstName":"Augustus","lastName":"Morrish","street":"430 Sauthoff Plaza","postalCode":"27710","city":"Durham","state":"NC","phoneNumber":"919-266-8155","email":"amorrishor@naver.com"}, -{"id":893,"firstName":"Cassaundra","lastName":"Deaves","street":"32 Clarendon Way","postalCode":"40266","city":"Louisville","state":"KY","phoneNumber":"502-138-7158"}, -{"id":894,"firstName":"Glynn","lastName":"Shewan","street":"989 Susan Avenue","postalCode":"95194","city":"San Jose","state":"CA","email":"gshewanot@reuters.com"}, -{"id":895,"firstName":"Neils","lastName":"Niesing","street":"488 Jana Road","postalCode":"48232","city":"Detroit","state":"MI","email":"nniesingou@cafepress.com"}, -{"id":896,"firstName":"Alix","lastName":"Cleeton","street":"8 Merrick Crossing","postalCode":"18018","city":"Bethlehem","state":"PA","email":"acleetonov@ask.com"}, -{"id":897,"firstName":"Kyrstin","lastName":"Alejandro","street":"45487 Carey Way","postalCode":"37919","city":"Knoxville","state":"TN","email":"kalejandroow@scribd.com"}, -{"id":898,"firstName":"Waylin","lastName":"De Caroli","street":"9237 Ludington Plaza","postalCode":"77554","city":"Galveston","state":"TX","email":"wdecaroliox@washingtonpost.com"}, -{"id":899,"firstName":"Lian","lastName":"Brade","street":"704 Lotheville Drive","postalCode":"24014","city":"Roanoke","state":"VA","phoneNumber":"540-712-7147"}, -{"id":900,"firstName":"Griz","lastName":"Elgie","street":"435 Northridge Point","postalCode":"93399","city":"Bakersfield","state":"CA","email":"gelgieoz@hao123.com"}, -{"id":901,"firstName":"Georgeanna","lastName":"Gilberthorpe","street":"6 Tomscot Park","postalCode":"37931","city":"Knoxville","state":"TN","phoneNumber":"865-664-6191","email":"ggilberthorpep0@typepad.com"}, -{"id":902,"firstName":"Korrie","lastName":"Goldstraw","street":"00 Lindbergh Plaza","postalCode":"14225","city":"Buffalo","state":"NY","email":"kgoldstrawp1@yellowbook.com"}, -{"id":903,"firstName":"Hervey","lastName":"Wyse","street":"27 Buell Road","postalCode":"75044","city":"Garland","state":"TX","phoneNumber":"972-243-9031","email":"hwysep2@deliciousdays.com"}, -{"id":904,"firstName":"Georgeta","lastName":"Buckam","street":"0 Continental Hill","postalCode":"65810","city":"Springfield","state":"MO","phoneNumber":"417-682-2553","email":"gbuckamp3@java.com"}, -{"id":905,"firstName":"Hussein","lastName":"Jacson","street":"478 Vermont Court","postalCode":"95354","city":"Modesto","state":"CA","phoneNumber":"209-714-7362","email":"hjacsonp4@squarespace.com"}, -{"id":906,"firstName":"Chrysler","lastName":"Heddy","street":"913 Steensland Parkway","postalCode":"20709","city":"Laurel","state":"MD","phoneNumber":"410-691-9748"}, -{"id":907,"firstName":"Jourdan","lastName":"Frise","street":"35 Erie Point","postalCode":"94245","city":"Sacramento","state":"CA","email":"jfrisep6@eepurl.com"}, -{"id":908,"firstName":"Roxie","lastName":"Gimber","street":"9237 Vermont Pass","postalCode":"88553","city":"El Paso","state":"TX","email":"rgimberp7@mayoclinic.com"}, -{"id":909,"firstName":"Jenilee","lastName":"MacNab","street":"23 Union Alley","postalCode":"29579","city":"Myrtle Beach","state":"SC","email":"jmacnabp8@mit.edu"}, -{"id":910,"firstName":"Lola","lastName":"Bier","street":"371 Bartillon Avenue","postalCode":"71105","city":"Shreveport","state":"LA","phoneNumber":"318-818-1659","email":"lbierp9@goo.gl"}, -{"id":911,"firstName":"Fayina","lastName":"Brosel","street":"3255 Macpherson Pass","postalCode":"55166","city":"Saint Paul","state":"MN","email":"fbroselpa@rakuten.co.jp"}, -{"id":912,"firstName":"Ellerey","lastName":"Darell","street":"735 Leroy Road","postalCode":"07544","city":"Paterson","state":"NJ"}, -{"id":913,"firstName":"Lorianne","lastName":"McLanachan","street":"22 Alpine Point","postalCode":"77293","city":"Houston","state":"TX","email":"lmclanachanpc@dmoz.org"}, -{"id":914,"firstName":"Merrill","lastName":"Searson","street":"8447 Namekagon Hill","postalCode":"55114","city":"Saint Paul","state":"MN","phoneNumber":"651-567-8380","email":"msearsonpd@census.gov"}, -{"id":915,"firstName":"Nisse","lastName":"Larive","street":"976 Forest Dale Way","postalCode":"10004","city":"New York City","state":"NY","phoneNumber":"347-192-6897","email":"nlarivepe@drupal.org"}, -{"id":916,"firstName":"Cazzie","lastName":"Brenard","street":"647 Gulseth Plaza","postalCode":"02283","city":"Boston","state":"MA","phoneNumber":"781-248-3572","email":"cbrenardpf@uiuc.edu"}, -{"id":917,"firstName":"Gael","lastName":"Ramirez","street":"161 Basil Terrace","postalCode":"93786","city":"Fresno","state":"CA","phoneNumber":"559-692-2653","email":"gramirezpg@ucoz.ru"}, -{"id":918,"firstName":"Culver","lastName":"Le Brun","street":"73906 Muir Terrace","postalCode":"95973","city":"Chico","state":"CA","email":"clebrunph@jigsy.com"}, -{"id":919,"firstName":"Bordie","lastName":"Muskett","street":"27 Nobel Trail","postalCode":"20599","city":"Washington","state":"DC","phoneNumber":"202-872-5253"}, -{"id":920,"firstName":"Riccardo","lastName":"Miskin","street":"778 Eagan Place","postalCode":"55407","city":"Minneapolis","state":"MN","email":"rmiskinpj@slideshare.net"}, -{"id":921,"firstName":"Cristabel","lastName":"Gowlett","street":"5 Quincy Lane","postalCode":"62525","city":"Decatur","state":"IL","email":"cgowlettpk@cafepress.com"}, -{"id":922,"firstName":"Crawford","lastName":"Huby","street":"6 Gina Lane","postalCode":"94913","city":"San Rafael","state":"CA","phoneNumber":"415-133-8552","email":"chubypl@jugem.jp"}, -{"id":923,"firstName":"Cherish","lastName":"Mutch","street":"8 Oak Valley Lane","postalCode":"20719","city":"Bowie","state":"MD","phoneNumber":"240-982-9087"}, -{"id":924,"firstName":"Jerrie","lastName":"Latek","street":"9462 Moulton Terrace","postalCode":"52809","city":"Davenport","state":"IA","phoneNumber":"563-687-6664","email":"jlatekpn@gov.uk"}, -{"id":925,"firstName":"Lacey","lastName":"Maris","street":"1 Carpenter Hill","postalCode":"61605","city":"Peoria","state":"IL","phoneNumber":"309-570-3216"}, -{"id":926,"firstName":"Daffy","lastName":"Binion","street":"8 Milwaukee Parkway","postalCode":"33129","city":"Miami","state":"FL","phoneNumber":"305-579-9009"}, -{"id":927,"firstName":"Melita","lastName":"Valde","street":"629 Packers Crossing","postalCode":"06140","city":"Hartford","state":"CT","phoneNumber":"860-747-5927","email":"mvaldepq@storify.com"}, -{"id":928,"firstName":"Cherlyn","lastName":"Rosenshine","street":"764 Pepper Wood Place","postalCode":"72204","city":"Little Rock","state":"AR","phoneNumber":"501-823-8134"}, -{"id":929,"firstName":"Morty","lastName":"Stanger","street":"3286 Charing Cross Court","postalCode":"08603","city":"Trenton","state":"NJ","email":"mstangerps@yellowpages.com"}, -{"id":930,"firstName":"Bernete","lastName":"Hirth","street":"83 Granby Center","postalCode":"95194","city":"San Jose","state":"CA","phoneNumber":"408-738-2333","email":"bhirthpt@people.com.cn"}, -{"id":931,"firstName":"Elena","lastName":"Wace","street":"98 Grover Trail","postalCode":"33742","city":"Saint Petersburg","state":"FL","phoneNumber":"727-883-2239","email":"ewacepu@merriam-webster.com"}, -{"id":932,"firstName":"Giselbert","lastName":"Sisland","street":"2214 Sheridan Pass","postalCode":"40225","city":"Louisville","state":"KY"}, -{"id":933,"firstName":"Herb","lastName":"Voyce","street":"628 Basil Pass","postalCode":"21265","city":"Baltimore","state":"MD"}, -{"id":934,"firstName":"Vina","lastName":"Antonetti","street":"6 Springview Terrace","postalCode":"20430","city":"Washington","state":"DC","phoneNumber":"202-955-4578"}, -{"id":935,"firstName":"Bard","lastName":"De Avenell","street":"2775 Clarendon Avenue","postalCode":"53215","city":"Milwaukee","state":"WI"}, -{"id":936,"firstName":"Briana","lastName":"Pinshon","street":"43 Del Sol Street","postalCode":"33615","city":"Tampa","state":"FL","email":"bpinshonpz@java.com"}, -{"id":937,"firstName":"Hilly","lastName":"Aysh","street":"37 Doe Crossing Terrace","postalCode":"23705","city":"Portsmouth","state":"VA","phoneNumber":"757-992-8124"}, -{"id":938,"firstName":"Marylin","lastName":"Ciotto","street":"3957 Browning Pass","postalCode":"94807","city":"Richmond","state":"CA"}, -{"id":939,"firstName":"Cam","lastName":"Kurth","street":"155 Walton Point","postalCode":"92867","city":"Orange","state":"CA","phoneNumber":"949-955-2248"}, -{"id":940,"firstName":"Rawley","lastName":"Bickle","street":"54 Macpherson Point","postalCode":"93762","city":"Fresno","state":"CA","phoneNumber":"559-331-2187","email":"rbickleq3@delicious.com"}, -{"id":941,"firstName":"Merlina","lastName":"Dunster","street":"70557 Toban Trail","postalCode":"20005","city":"Washington","state":"DC","phoneNumber":"202-999-8731"}, -{"id":942,"firstName":"Kennie","lastName":"MacCoughan","street":"04566 Browning Parkway","postalCode":"75507","city":"Texarkana","state":"TX","phoneNumber":"903-622-7509","email":"kmaccoughanq5@reuters.com"}, -{"id":943,"firstName":"Jase","lastName":"Cholomin","street":"21497 Blaine Road","postalCode":"33777","city":"Largo","state":"FL","email":"jcholominq6@cocolog-nifty.com"}, -{"id":944,"firstName":"Cirstoforo","lastName":"Billingsley","street":"1306 Summer Ridge Court","postalCode":"02124","city":"Boston","state":"MA","email":"cbillingsleyq7@google.es"}, -{"id":945,"firstName":"Berkly","lastName":"Lawles","street":"80400 Milwaukee Way","postalCode":"64082","city":"Lees Summit","state":"MO","email":"blawlesq8@jiathis.com"}, -{"id":946,"firstName":"Otha","lastName":"Key","street":"59639 Center Circle","postalCode":"35405","city":"Tuscaloosa","state":"AL","email":"okeyq9@deliciousdays.com"}, -{"id":947,"firstName":"Anselma","lastName":"Debow","street":"5 Spohn Parkway","postalCode":"80241","city":"Denver","state":"CO","email":"adebowqa@yelp.com"}, -{"id":948,"firstName":"Auria","lastName":"Beric","street":"5 Anderson Way","postalCode":"20022","city":"Washington","state":"DC","email":"abericqb@a8.net"}, -{"id":949,"firstName":"Eirena","lastName":"Caswall","street":"4648 Fulton Street","postalCode":"64054","city":"Independence","state":"MO","phoneNumber":"816-406-0779","email":"ecaswallqc@i2i.jp"}, -{"id":950,"firstName":"Tracy","lastName":"Sperwell","street":"4 Heath Drive","postalCode":"91499","city":"Van Nuys","state":"CA"}, -{"id":951,"firstName":"Cherilyn","lastName":"Faint","street":"814 Anniversary Lane","postalCode":"24503","city":"Lynchburg","state":"VA","phoneNumber":"434-722-2344","email":"cfaintqe@amazon.de"}, -{"id":952,"firstName":"Sela","lastName":"Darcey","street":"002 Walton Hill","postalCode":"78703","city":"Austin","state":"TX","email":"sdarceyqf@lycos.com"}, -{"id":953,"firstName":"Freddie","lastName":"Klagge","street":"842 Schlimgen Road","postalCode":"29905","city":"Beaufort","state":"SC","email":"fklaggeqg@1und1.de"}, -{"id":954,"firstName":"Eunice","lastName":"Walrond","street":"4 Mifflin Terrace","postalCode":"68117","city":"Omaha","state":"NE","email":"ewalrondqh@arstechnica.com"}, -{"id":955,"firstName":"Adelbert","lastName":"Meuse","street":"971 Doe Crossing Court","postalCode":"27157","city":"Winston Salem","state":"NC"}, -{"id":956,"firstName":"Caitlin","lastName":"Windham","street":"29 Cordelia Alley","postalCode":"76210","city":"Denton","state":"TX","phoneNumber":"214-498-2801","email":"cwindhamqj@trellian.com"}, -{"id":957,"firstName":"Jere","lastName":"Presho","street":"7 Monica Plaza","postalCode":"75710","city":"Tyler","state":"TX","email":"jpreshoqk@e-recht24.de"}, -{"id":958,"firstName":"Lonny","lastName":"Cotter","street":"5686 Rutledge Place","postalCode":"40596","city":"Lexington","state":"KY","email":"lcotterql@last.fm"}, -{"id":959,"firstName":"Sarah","lastName":"Earnshaw","street":"69 Prentice Point","postalCode":"60669","city":"Chicago","state":"IL","email":"searnshawqm@ycombinator.com"}, -{"id":960,"firstName":"Claire","lastName":"Minette","street":"3145 Butterfield Terrace","postalCode":"43204","city":"Columbus","state":"OH","phoneNumber":"614-157-5341","email":"cminetteqn@upenn.edu"}, -{"id":961,"firstName":"Traci","lastName":"Farnes","street":"2 Service Circle","postalCode":"06905","city":"Stamford","state":"CT","phoneNumber":"203-311-5859","email":"tfarnesqo@merriam-webster.com"}, -{"id":962,"firstName":"Storm","lastName":"de Werk","street":"9 Jenifer Alley","postalCode":"98121","city":"Seattle","state":"WA","phoneNumber":"425-172-3688"}, -{"id":963,"firstName":"Neile","lastName":"Mackrill","street":"5046 Schurz Point","postalCode":"28299","city":"Charlotte","state":"NC"}, -{"id":964,"firstName":"Temple","lastName":"Howlings","street":"8831 Randy Street","postalCode":"71161","city":"Shreveport","state":"LA","phoneNumber":"318-859-6319","email":"thowlingsqr@smugmug.com"}, -{"id":965,"firstName":"Roda","lastName":"Drissell","street":"16621 Mandrake Lane","postalCode":"78744","city":"Austin","state":"TX","email":"rdrissellqs@mayoclinic.com"}, -{"id":966,"firstName":"Francoise","lastName":"Lawman","street":"7 Calypso Point","postalCode":"14614","city":"Rochester","state":"NY","phoneNumber":"585-995-3882"}, -{"id":967,"firstName":"Helen","lastName":"Kigelman","street":"613 Manley Plaza","postalCode":"01905","city":"Lynn","state":"MA","email":"hkigelmanqu@shutterfly.com"}, -{"id":968,"firstName":"Dudley","lastName":"Cansdall","street":"153 Schmedeman Place","postalCode":"93715","city":"Fresno","state":"CA","email":"dcansdallqv@naver.com"}, -{"id":969,"firstName":"Shelby","lastName":"Fayers","street":"94681 Knutson Point","postalCode":"10039","city":"New York City","state":"NY"}, -{"id":970,"firstName":"Sileas","lastName":"Jalland","street":"2199 Buhler Circle","postalCode":"10029","city":"New York City","state":"NY","phoneNumber":"917-902-1667","email":"sjallandqx@rakuten.co.jp"}, -{"id":971,"firstName":"Zeke","lastName":"Duffett","street":"5 Coolidge Park","postalCode":"37995","city":"Knoxville","state":"TN","phoneNumber":"865-814-8540","email":"zduffettqy@wikispaces.com"}, -{"id":972,"firstName":"Tabby","lastName":"Mathieu","street":"78 Donald Circle","postalCode":"55114","city":"Saint Paul","state":"MN","email":"tmathieuqz@rediff.com"}, -{"id":973,"firstName":"Zsa zsa","lastName":"Knights","street":"208 Kingsford Park","postalCode":"15250","city":"Pittsburgh","state":"PA","phoneNumber":"412-652-8956","email":"zknightsr0@privacy.gov.au"}, -{"id":974,"firstName":"Tildi","lastName":"Knewstub","street":"8572 Gina Hill","postalCode":"32909","city":"Palm Bay","state":"FL","email":"tknewstubr1@archive.org"}, -{"id":975,"firstName":"Eric","lastName":"Wharrier","street":"9 Marcy Alley","postalCode":"38126","city":"Memphis","state":"TN","phoneNumber":"901-378-1545","email":"ewharrierr2@people.com.cn"}, -{"id":976,"firstName":"Jilleen","lastName":"Durgan","street":"7 Lien Plaza","postalCode":"75241","city":"Dallas","state":"TX","email":"jdurganr3@google.pl"}, -{"id":977,"firstName":"Ingeberg","lastName":"Whipp","street":"489 Bartillon Street","postalCode":"22205","city":"Arlington","state":"VA","phoneNumber":"703-356-7728","email":"iwhippr4@un.org"}, -{"id":978,"firstName":"Drake","lastName":"McCreagh","street":"735 Mcguire Lane","postalCode":"20530","city":"Washington","state":"DC","email":"dmccreaghr5@mediafire.com"}, -{"id":979,"firstName":"Byron","lastName":"Eades","street":"931 Hollow Ridge Avenue","postalCode":"23285","city":"Richmond","state":"VA","phoneNumber":"804-728-5669","email":"beadesr6@npr.org"}, -{"id":980,"firstName":"Free","lastName":"Tungate","street":"7037 Ramsey Crossing","postalCode":"64153","city":"Kansas City","state":"MO","email":"ftungater7@macromedia.com"}, -{"id":981,"firstName":"Augustus","lastName":"Benardet","street":"398 Bultman Circle","postalCode":"70165","city":"New Orleans","state":"LA"}, -{"id":982,"firstName":"Sanders","lastName":"Sullens","street":"75785 Westend Terrace","postalCode":"43656","city":"Toledo","state":"OH","phoneNumber":"419-314-1134"}, -{"id":983,"firstName":"Ynes","lastName":"Troup","street":"328 Schurz Trail","postalCode":"98907","city":"Yakima","state":"WA","phoneNumber":"509-696-5645"}, -{"id":984,"firstName":"Siana","lastName":"Bernath","street":"968 Sommers Lane","postalCode":"55487","city":"Minneapolis","state":"MN","phoneNumber":"612-351-3016"}, -{"id":985,"firstName":"Ellary","lastName":"Enders","street":"2 Charing Cross Court","postalCode":"06505","city":"New Haven","state":"CT","phoneNumber":"203-608-5058"}, -{"id":986,"firstName":"Mariann","lastName":"Damerell","street":"885 Pennsylvania Crossing","postalCode":"15220","city":"Pittsburgh","state":"PA","phoneNumber":"412-667-1349","email":"mdamerellrd@moonfruit.com"}, -{"id":987,"firstName":"Timotheus","lastName":"Muncer","street":"293 Hoepker Center","postalCode":"32405","city":"Panama City","state":"FL","phoneNumber":"850-740-2501","email":"tmuncerre@ifeng.com"}, -{"id":988,"firstName":"Hermina","lastName":"Tetsall","street":"9354 Nobel Road","postalCode":"55585","city":"Monticello","state":"MN","phoneNumber":"763-292-3970","email":"htetsallrf@wsj.com"}, -{"id":989,"firstName":"Dorelia","lastName":"Howship","street":"747 Namekagon Way","postalCode":"14269","city":"Buffalo","state":"NY","phoneNumber":"716-470-3584","email":"dhowshiprg@un.org"}, -{"id":990,"firstName":"Peggy","lastName":"Coutts","street":"34 Village Green Road","postalCode":"19131","city":"Philadelphia","state":"PA"}, -{"id":991,"firstName":"Dacey","lastName":"Inglefield","street":"05227 Buell Avenue","postalCode":"45414","city":"Dayton","state":"OH"}, -{"id":992,"firstName":"Hollyanne","lastName":"Hobbema","street":"684 La Follette Drive","postalCode":"45218","city":"Cincinnati","state":"OH","phoneNumber":"513-346-0258"}, -{"id":993,"firstName":"Freedman","lastName":"Whorlow","street":"291 Maywood Pass","postalCode":"48098","city":"Troy","state":"MI","phoneNumber":"248-890-5937"}, -{"id":994,"firstName":"Karine","lastName":"Gerring","street":"163 Graceland Street","postalCode":"95397","city":"Modesto","state":"CA"}, -{"id":995,"firstName":"Sonya","lastName":"Giercke","street":"1801 Rowland Junction","postalCode":"66215","city":"Shawnee Mission","state":"KS","email":"sgierckerm@mapquest.com"}, -{"id":996,"firstName":"Fabiano","lastName":"O'Hear","street":"87555 Sunnyside Plaza","postalCode":"33330","city":"Fort Lauderdale","state":"FL","email":"fohearrn@china.com.cn"}, -{"id":997,"firstName":"Lelia","lastName":"Gillman","street":"29838 Eagan Junction","postalCode":"78783","city":"Austin","state":"TX","phoneNumber":"512-515-1461","email":"lgillmanro@amazon.co.jp"}, -{"id":998,"firstName":"Ophelie","lastName":"Richardet","street":"9 Bay Point","postalCode":"94042","city":"Mountain View","state":"CA"}, -{"id":999,"firstName":"Batholomew","lastName":"Janzen","street":"9 Rigney Alley","postalCode":"95113","city":"San Jose","state":"CA"}, -{"id":1000,"firstName":"Kirstyn","lastName":"Bixley","street":"2 Cascade Trail","postalCode":"80015","city":"Aurora","state":"CO","phoneNumber":"303-339-2309","email":"kbixleyrr@i2i.jp"}] \ No newline at end of file diff --git a/json-2/src/test/resources/sample_input.json b/json-2/src/test/resources/sample_input.json deleted file mode 100644 index b6e90da357af..000000000000 --- a/json-2/src/test/resources/sample_input.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "Baeldung", - "area": "tech blogs", - "author": "Eugen", - "id": 32134, - "salary": 70000, - "topics": [ - "java", - "kotlin", - "cs", - "linux" - ] -} \ No newline at end of file diff --git a/json-path/.gitignore b/json-path/.gitignore deleted file mode 100644 index 83c05e60c802..000000000000 --- a/json-path/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/json-path/README.md b/json-path/README.md deleted file mode 100644 index e3f81e827bc7..000000000000 --- a/json-path/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## JsonPath - -This module contains articles about JsonPath. - -### Relevant articles: - -- [Introduction to JsonPath](https://www.baeldung.com/guide-to-jayway-jsonpath) -- [Count with JsonPath](https://www.baeldung.com/jsonpath-count) diff --git a/json-path/pom.xml b/json-path/pom.xml deleted file mode 100644 index b4577ec15f42..000000000000 --- a/json-path/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - 4.0.0 - json-path - 0.0.1-SNAPSHOT - json-path - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - - - - - com.jayway.jsonpath - json-path - ${json-path.version} - - - - - - 2.4.0 - - - \ No newline at end of file diff --git a/json-path/src/main/resources/intro_api.json b/json-path/src/main/resources/intro_api.json deleted file mode 100644 index 8a252f2971f5..000000000000 --- a/json-path/src/main/resources/intro_api.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "tool": - { - "jsonpath": - { - "creator": - { - "name": "Jayway Inc.", - "location": - [ - "Malmo", - "Stockholm", - "Copenhagen", - "San Francisco", - "Karlskrona", - "Halmstad", - "Helsingborg" - ] - }, - - "current release": "2.1" - } - }, - - "book": - [ - { - "title": "Beginning JSON", - "author": "Ben Smith", - "price": 49.99 - }, - - { - "title": "JSON at Work", - "author": "Tom Marrs", - "price": 29.99 - }, - - { - "title": "Learn JSON in a DAY", - "author": "Acodemy", - "price": 8.99 - }, - - { - "title": "JSON: Questions and Answers", - "author": "George Duckett", - "price": 6.00 - } - ], - - "price range": - { - "cheap": 10.00, - "medium": 20.00 - } -} \ No newline at end of file diff --git a/json-path/src/main/resources/intro_service.json b/json-path/src/main/resources/intro_service.json deleted file mode 100644 index 448492463a29..000000000000 --- a/json-path/src/main/resources/intro_service.json +++ /dev/null @@ -1,61 +0,0 @@ -[ - { - "id": 1, - "title": "Casino Royale", - "director": "Martin Campbell", - "starring": - [ - "Daniel Craig", - "Eva Green" - ], - - "desc": "Twenty-first James Bond movie", - "release date": 1163466000000, - "box office": 594275385 - }, - - { - "id": 2, - "title": "Quantum of Solace", - "director": "Marc Forster", - "starring": - [ - "Daniel Craig", - "Olga Kurylenko" - ], - - "desc": "Twenty-second James Bond movie", - "release date": 1225242000000, - "box office": 591692078 - }, - - { - "id": 3, - "title": "Skyfall", - "director": "Sam Mendes", - "starring": - [ - "Daniel Craig", - "Naomie Harris" - ], - - "desc": "Twenty-third James Bond movie", - "release date": 1350954000000, - "box office": 1110526981 - }, - - { - "id": 4, - "title": "Spectre", - "director": "Sam Mendes", - "starring": - [ - "Daniel Craig", - "Lea Seydoux" - ], - - "desc": "Twenty-fourth James Bond movie", - "release date": 1445821200000, - "box office": 879376275 - } -] \ No newline at end of file diff --git a/json-path/src/main/resources/intro_user.json b/json-path/src/main/resources/intro_user.json deleted file mode 100644 index c35914c6c4d1..000000000000 --- a/json-path/src/main/resources/intro_user.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "username": "oracle", - "password": - { - "current": - { - "value": "Java_SE_8", - "created": 1397754000000 - }, - - "old": - [ - { - "value": "Java_SE_7", - "created": 1312650000000 - } - ] - } - }, - - { - "username": "sun", - "password": - { - "current": - { - "value": "Java_SE_6", - "created": 1168448400000 - }, - - "old": - [ - { - "value": "J2SE_5.0", - "created": 1099069200000 - }, - - { - "value": "J2SE_1.4", - "created": 1025542800000 - } - ] - } - } -] \ No newline at end of file diff --git a/json-path/src/main/resources/logback.xml b/json-path/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/json-path/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/json-path/src/main/resources/online_store.json b/json-path/src/main/resources/online_store.json deleted file mode 100644 index c0ddf274d8ec..000000000000 --- a/json-path/src/main/resources/online_store.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "items":{ - "book":[ - { - "author":"Arthur Conan Doyle", - "title":"Sherlock Holmes", - "price":8.99 - }, - { - "author":"J. R. R. Tolkien", - "title":"The Lord of the Rings", - "isbn":"0-395-19395-8", - "price":22.99 - } - ], - "bicycle":{ - "color":"red", - "price":19.95 - } - }, - "url":"mystore.com", - "owner":"baeldung" -} \ No newline at end of file diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java deleted file mode 100644 index 3408629a6d6f..000000000000 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/JsonPathUnitTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.jsonpath.introduction; - -import static org.junit.Assert.assertEquals; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.util.Map; - -import org.junit.BeforeClass; -import org.junit.Test; - -import com.jayway.jsonpath.JsonPath; - -import net.minidev.json.JSONArray; - -public class JsonPathUnitTest { - - private static String json; - private static File jsonFile = new File("src/main/resources/online_store.json"); - - private static String readFile(File file, Charset charset) throws IOException { - return new String(Files.readAllBytes(file.toPath()), charset); - } - - @BeforeClass - public static void init() throws IOException { - json = readFile(jsonFile, StandardCharsets.UTF_8); - } - - @Test - public void shouldMatchCountOfObjects() { - Map objectMap = JsonPath.read(json, "$"); - assertEquals(3, objectMap.keySet() - .size()); - } - - @Test - public void shouldMatchCountOfArrays() { - JSONArray jsonArray = JsonPath.read(json, "$.items.book[*]"); - assertEquals(2, jsonArray.size()); - } - -} diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java deleted file mode 100644 index 7728d2dad6ef..000000000000 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.baeldung.jsonpath.introduction; - -import com.jayway.jsonpath.Criteria; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.Filter; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Predicate; -import org.junit.Test; - -import java.io.InputStream; -import java.util.List; -import java.util.Map; -import java.util.Scanner; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -public class OperationIntegrationTest { - private InputStream jsonInputStream = this.getClass() - .getClassLoader() - .getResourceAsStream("intro_api.json"); - private String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z") - .next(); - - @Test - public void givenJsonPathWithoutPredicates_whenReading_thenCorrect() { - String jsonpathCreatorNamePath = "$['tool']['jsonpath']['creator']['name']"; - String jsonpathCreatorLocationPath = "$['tool']['jsonpath']['creator']['location'][*]"; - - DocumentContext jsonContext = JsonPath.parse(jsonDataSourceString); - String jsonpathCreatorName = jsonContext.read(jsonpathCreatorNamePath); - List jsonpathCreatorLocation = jsonContext.read(jsonpathCreatorLocationPath); - - assertEquals("Jayway Inc.", jsonpathCreatorName); - assertThat(jsonpathCreatorLocation.toString(), containsString("Malmo")); - assertThat(jsonpathCreatorLocation.toString(), containsString("San Francisco")); - assertThat(jsonpathCreatorLocation.toString(), containsString("Helsingborg")); - } - - @Test - public void givenJsonPathWithFilterPredicate_whenReading_thenCorrect() { - Filter expensiveFilter = Filter.filter(Criteria.where("price") - .gt(20.00)); - List> expensive = JsonPath.parse(jsonDataSourceString) - .read("$['book'][?]", expensiveFilter); - predicateUsageAssertionHelper(expensive); - } - - @Test - public void givenJsonPathWithCustomizedPredicate_whenReading_thenCorrect() { - Predicate expensivePredicate = context -> Float.valueOf(context.item(Map.class) - .get("price") - .toString()) > 20.00; - List> expensive = JsonPath.parse(jsonDataSourceString) - .read("$['book'][?]", expensivePredicate); - predicateUsageAssertionHelper(expensive); - } - - @Test - public void givenJsonPathWithInlinePredicate_whenReading_thenCorrect() { - List> expensive = JsonPath.parse(jsonDataSourceString) - .read("$['book'][?(@['price'] > $['price range']['medium'])]"); - predicateUsageAssertionHelper(expensive); - } - - private void predicateUsageAssertionHelper(List predicate) { - assertThat(predicate.toString(), containsString("Beginning JSON")); - assertThat(predicate.toString(), containsString("JSON at Work")); - assertThat(predicate.toString(), not(containsString("Learn JSON in a DAY"))); - assertThat(predicate.toString(), not(containsString("JSON: Questions and Answers"))); - } -} diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java deleted file mode 100644 index 85e5d3e82627..000000000000 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceIntegrationTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.baeldung.jsonpath.introduction; - -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; -import org.junit.Test; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Scanner; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -public class ServiceIntegrationTest { - private InputStream jsonInputStream = this.getClass() - .getClassLoader() - .getResourceAsStream("intro_service.json"); - private String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z") - .next(); - - @Test - public void givenId_whenRequestingRecordData_thenSucceed() { - Object dataObject = JsonPath.parse(jsonString) - .read("$[?(@.id == 2)]"); - String dataString = dataObject.toString(); - - assertThat(dataString, containsString("2")); - assertThat(dataString, containsString("Quantum of Solace")); - assertThat(dataString, containsString("Twenty-second James Bond movie")); - } - - @Test - public void givenStarring_whenRequestingMovieTitle_thenSucceed() { - List> dataList = JsonPath.parse(jsonString) - .read("$[?('Eva Green' in @['starring'])]"); - String title = (String) dataList.get(0) - .get("title"); - - assertEquals("Casino Royale", title); - } - - @Test - public void givenCompleteStructure_whenCalculatingTotalRevenue_thenSucceed() { - DocumentContext context = JsonPath.parse(jsonString); - int length = context.read("$.length()"); - long revenue = 0; - for (int i = 0; i < length; i++) { - revenue += context.read("$[" + i + "]['box office']", Long.class); - } - - assertEquals(594275385L + 591692078L + 1110526981L + 879376275L, revenue); - } - - @Test - public void givenStructure_whenRequestingHighestRevenueMovieTitle_thenSucceed() { - DocumentContext context = JsonPath.parse(jsonString); - List revenueList = context.read("$[*]['box office']"); - Integer[] revenueArray = revenueList.toArray(new Integer[0]); - Arrays.sort(revenueArray); - - int highestRevenue = revenueArray[revenueArray.length - 1]; - Configuration pathConfiguration = Configuration.builder() - .options(Option.AS_PATH_LIST) - .build(); - List pathList = JsonPath.using(pathConfiguration) - .parse(jsonString) - .read("$[?(@['box office'] == " + highestRevenue + ")]"); - - Map dataRecord = context.read(pathList.get(0)); - String title = dataRecord.get("title"); - - assertEquals("Skyfall", title); - } - - @Test - public void givenDirector_whenRequestingLatestMovieTitle_thenSucceed() { - DocumentContext context = JsonPath.parse(jsonString); - List> dataList = context.read("$[?(@.director == 'Sam Mendes')]"); - - List dateList = new ArrayList<>(); - for (Map item : dataList) { - Object date = item.get("release date"); - dateList.add(date); - } - Long[] dateArray = dateList.toArray(new Long[0]); - Arrays.sort(dateArray); - - long latestTime = dateArray[dateArray.length - 1]; - List> finalDataList = context.read("$[?(@['director'] == 'Sam Mendes' && @['release date'] == " + latestTime + ")]"); - String title = (String) finalDataList.get(0) - .get("title"); - - assertEquals("Spectre", title); - } -} \ No newline at end of file diff --git a/json-path/src/test/resources/logback.xml b/json-path/src/test/resources/logback.xml deleted file mode 100644 index 56af2d397e63..000000000000 --- a/json-path/src/test/resources/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/json/README.md b/json/README.md deleted file mode 100644 index 73db055679df..000000000000 --- a/json/README.md +++ /dev/null @@ -1,16 +0,0 @@ -## JSON - -This module contains articles about JSON. - -### Relevant Articles: -- [Introduction to JSON Schema in Java](https://www.baeldung.com/introduction-to-json-schema-in-java) -- [Introduction to JSONForms](https://www.baeldung.com/introduction-to-jsonforms) -- [Introduction to JsonPath](https://www.baeldung.com/guide-to-jayway-jsonpath) -- [Introduction to JSON-Java (org.json)](https://www.baeldung.com/java-org-json) -- [Overview of JSON Pointer](https://www.baeldung.com/json-pointer) -- [Introduction to the JSON Binding API (JSR 367) in Java](https://www.baeldung.com/java-json-binding-api) -- [Get a Value by Key in a JSONArray](https://www.baeldung.com/java-jsonarray-get-value-by-key) -- [Iterating Over an Instance of org.json.JSONObject](https://www.baeldung.com/jsonobject-iteration) -- [Escape JSON String in Java](https://www.baeldung.com/java-json-escaping) -- [Reducing JSON Data Size](https://www.baeldung.com/json-reduce-data-size) -- More Articles: [[next -->]](../json-2) diff --git a/json/pom.xml b/json/pom.xml deleted file mode 100644 index 87bbad460a1b..000000000000 --- a/json/pom.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - 4.0.0 - org.baeldung - json - 0.0.1-SNAPSHOT - json - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - - - - org.everit.json - org.everit.json.schema - ${everit.json.schema.version} - - - commons-logging - commons-logging - - - - - org.json - json - ${json.version} - - - com.google.code.gson - gson - ${gson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - javax.json.bind - javax.json.bind-api - ${jsonb-api.version} - - - org.glassfish - javax.json - ${javax.version} - - - org.eclipse - yasson - ${yasson.version} - - - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - test - - - net.javacrumbs.json-unit - json-unit-assertj - ${json-unit-assertj.version} - test - - - - - 1.4.1 - 1.0 - 1.0.1 - 20211205 - 2.8.5 - 1.1.2 - 2.28.0 - - - \ No newline at end of file diff --git a/json/src/main/java/com/baeldung/adapter/PersonAdapter.java b/json/src/main/java/com/baeldung/adapter/PersonAdapter.java deleted file mode 100644 index dfab2eb0d200..000000000000 --- a/json/src/main/java/com/baeldung/adapter/PersonAdapter.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.adapter; - -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.bind.adapter.JsonbAdapter; - -import com.baeldung.jsonb.Person; - -public class PersonAdapter implements JsonbAdapter { - - @Override - public JsonObject adaptToJson(Person p) throws Exception { - return Json.createObjectBuilder() - .add("id", p.getId()) - .add("name", p.getName()) - .build(); - } - - @Override - public Person adaptFromJson(JsonObject adapted) throws Exception { - Person person = new Person(); - person.setId(adapted.getInt("id")); - person.setName(adapted.getString("name")); - return person; - } -} \ No newline at end of file diff --git a/json/src/main/java/com/baeldung/escape/JsonEscape.java b/json/src/main/java/com/baeldung/escape/JsonEscape.java deleted file mode 100644 index 1e5f0d87cba4..000000000000 --- a/json/src/main/java/com/baeldung/escape/JsonEscape.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.escape; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.JsonObject; -import org.json.JSONObject; - -class JsonEscape { - - String escapeJson(String input) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("message", input); - return jsonObject.toString(); - } - - String escapeGson(String input) { - JsonObject gsonObject = new JsonObject(); - gsonObject.addProperty("message", input); - return gsonObject.toString(); - } - - String escapeJackson(String input) throws JsonProcessingException { - return new ObjectMapper().writeValueAsString(new Payload(input)); - } - - static class Payload { - String message; - - Payload(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - } -} diff --git a/json/src/main/java/com/baeldung/jsonb/Person.java b/json/src/main/java/com/baeldung/jsonb/Person.java deleted file mode 100644 index a506c1b0003f..000000000000 --- a/json/src/main/java/com/baeldung/jsonb/Person.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.baeldung.jsonb; - -import java.math.BigDecimal; -import java.time.LocalDate; - -import javax.json.bind.annotation.JsonbDateFormat; -import javax.json.bind.annotation.JsonbNumberFormat; -import javax.json.bind.annotation.JsonbProperty; -import javax.json.bind.annotation.JsonbTransient; - -public class Person { - - private int id; - @JsonbProperty("person-name") - private String name; - @JsonbProperty(nillable = true) - private String email; - @JsonbTransient - private int age; - @JsonbDateFormat("dd-MM-yyyy") - private LocalDate registeredDate; - private BigDecimal salary; - - public Person() { - this(0, "", "", 0, LocalDate.now(), new BigDecimal(0)); - } - - public Person(int id, String name, String email, int age, LocalDate registeredDate, BigDecimal salary) { - this.id = id; - this.name = name; - this.email = email; - this.age = age; - this.registeredDate = registeredDate; - this.salary = salary; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @JsonbNumberFormat(locale = "en_US", value = "#0.0") - public BigDecimal getSalary() { - return salary; - } - - public void setSalary(BigDecimal salary) { - this.salary = salary; - } - - public LocalDate getRegisteredDate() { - return registeredDate; - } - - public void setRegisteredDate(LocalDate registeredDate) { - this.registeredDate = registeredDate; - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("Person [id="); - builder.append(id); - builder.append(", name="); - builder.append(name); - builder.append(", email="); - builder.append(email); - builder.append(", age="); - builder.append(age); - builder.append(", registeredDate="); - builder.append(registeredDate); - builder.append(", salary="); - builder.append(salary); - builder.append("]"); - return builder.toString(); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + id; - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Person other = (Person) obj; - if (id != other.id) - return false; - return true; - } - -} diff --git a/json/src/main/java/com/baeldung/jsonjava/CDLDemo.java b/json/src/main/java/com/baeldung/jsonjava/CDLDemo.java deleted file mode 100644 index 6f4b2dacf7a7..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/CDLDemo.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.CDL; -import org.json.JSONArray; -import org.json.JSONTokener; - -public class CDLDemo { - public static void main(String[] args) { - System.out.println("8.1. Producing JSONArray Directly from Comma Delimited Text: "); - jsonArrayFromCDT(); - - System.out.println("\n8.2. Producing Comma Delimited Text from JSONArray: "); - cDTfromJSONArray(); - - System.out.println("\n8.3.1. Producing JSONArray of JSONObjects Using Comma Delimited Text: "); - jaOfJOFromCDT2(); - - System.out.println("\n8.3.2. Producing JSONArray of JSONObjects Using Comma Delimited Text: "); - jaOfJOFromCDT2(); - } - - public static void jsonArrayFromCDT() { - JSONArray ja = CDL.rowToJSONArray(new JSONTokener("England, USA, Canada")); - System.out.println(ja); - } - - public static void cDTfromJSONArray() { - JSONArray ja = new JSONArray("[\"England\",\"USA\",\"Canada\"]"); - String cdt = CDL.rowToString(ja); - System.out.println(cdt); - } - - public static void jaOfJOFromCDT() { - String string = - "name, city, age \n" + - "john, chicago, 22 \n" + - "gary, florida, 35 \n" + - "sal, vegas, 18"; - - JSONArray result = CDL.toJSONArray(string); - System.out.println(result.toString()); - } - - public static void jaOfJOFromCDT2() { - JSONArray ja = new JSONArray(); - ja.put("name"); - ja.put("city"); - ja.put("age"); - - String string = - "john, chicago, 22 \n" + - "gary, florida, 35 \n" + - "sal, vegas, 18"; - - JSONArray result = CDL.toJSONArray(ja, string); - System.out.println(result.toString()); - } - -} diff --git a/json/src/main/java/com/baeldung/jsonjava/CookieDemo.java b/json/src/main/java/com/baeldung/jsonjava/CookieDemo.java deleted file mode 100644 index 96a479541cce..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/CookieDemo.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.Cookie; -import org.json.JSONObject; - -public class CookieDemo { - public static void main(String[] args) { - System.out.println("9.1. Converting a Cookie String into a JSONObject"); - cookieStringToJSONObject(); - - System.out.println("\n9.2. Converting a JSONObject into Cookie String"); - jSONObjectToCookieString(); - } - - public static void cookieStringToJSONObject() { - String cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; - JSONObject cookieJO = Cookie.toJSONObject(cookie); - System.out.println(cookieJO); - } - - public static void jSONObjectToCookieString() { - JSONObject cookieJO = new JSONObject(); - cookieJO.put("name", "username"); - cookieJO.put("value", "John Doe"); - cookieJO.put("expires", "Thu, 18 Dec 2013 12:00:00 UTC"); - cookieJO.put("path", "/"); - String cookie = Cookie.toString(cookieJO); - System.out.println(cookie); - } -} diff --git a/json/src/main/java/com/baeldung/jsonjava/DemoBean.java b/json/src/main/java/com/baeldung/jsonjava/DemoBean.java deleted file mode 100644 index 6d27b329c240..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/DemoBean.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.jsonjava; - -public class DemoBean { - private int id; - private String name; - private boolean active; - - public int getId() { - return id; - } - public void setId(int id) { - this.id = id; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public boolean isActive() { - return active; - } - public void setActive(boolean active) { - this.active = active; - } -} diff --git a/json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java b/json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java deleted file mode 100644 index 5c6f684d634c..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/HTTPDemo.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.HTTP; -import org.json.JSONObject; - -public class HTTPDemo { - public static void main(String[] args) { - System.out.println("10.1. Converting JSONObject to HTTP Header: "); - jSONObjectToHTTPHeader(); - - System.out.println("\n10.2. Converting HTTP Header String Back to JSONObject: "); - hTTPHeaderToJSONObject(); - } - - public static void jSONObjectToHTTPHeader() { - JSONObject jo = new JSONObject(); - jo.put("Method", "POST"); - jo.put("Request-URI", "http://www.example.com/"); - jo.put("HTTP-Version", "HTTP/1.1"); - System.out.println(HTTP.toString(jo)); - } - - public static void hTTPHeaderToJSONObject() { - JSONObject obj = HTTP.toJSONObject("POST \"http://www.example.com/\" HTTP/1.1"); - System.out.println(obj); - } -} diff --git a/json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java b/json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java deleted file mode 100644 index a7341c8d9d95..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/JSONArrayDemo.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.jsonjava; - -import java.util.ArrayList; -import java.util.List; - -import org.json.JSONArray; -import org.json.JSONObject; - -public class JSONArrayDemo { - public static void main(String[] args) { - System.out.println("6.1. Creating JSON Array: "); - creatingJSONArray(); - - System.out.println("\n6.2. Creating JSON Array from JSON string: "); - jsonArrayFromJSONString(); - - System.out.println("\n6.3. Creating JSON Array from Collection Object: "); - jsonArrayFromCollectionObj(); - } - - public static void creatingJSONArray() { - JSONArray ja = new JSONArray(); - ja.put(Boolean.TRUE); - ja.put("lorem ipsum"); - - // We can also put a JSONObject in JSONArray - JSONObject jo = new JSONObject(); - jo.put("name", "jon doe"); - jo.put("age", "22"); - jo.put("city", "chicago"); - - ja.put(jo); - - System.out.println(ja.toString()); - } - - public static void jsonArrayFromJSONString() { - JSONArray ja = new JSONArray("[true, \"lorem ipsum\", 215]"); - System.out.println(ja); - } - - public static void jsonArrayFromCollectionObj() { - List list = new ArrayList<>(); - list.add("California"); - list.add("Texas"); - list.add("Hawaii"); - list.add("Alaska"); - - JSONArray ja = new JSONArray(list); - System.out.println(ja); - } -} \ No newline at end of file diff --git a/json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java b/json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java deleted file mode 100644 index b3df318e22dd..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/JSONArrayGetValueByKey.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.jsonjava; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import org.json.JSONArray; -import org.json.JSONObject; - -public class JSONArrayGetValueByKey { - - public List getValuesByKeyInJSONArray(String jsonArrayStr, String key) { - List values = new ArrayList<>(); - JSONArray jsonArray = new JSONArray(jsonArrayStr); - for (int idx = 0; idx < jsonArray.length(); idx++) { - JSONObject jsonObj = jsonArray.getJSONObject(idx); - values.add(jsonObj.optString(key)); - } - return values; - } - - public List getValuesByKeyInJSONArrayUsingJava8(String jsonArrayStr, String key) { - JSONArray jsonArray = new JSONArray(jsonArrayStr); - return IntStream.range(0, jsonArray.length()) - .mapToObj(index -> ((JSONObject) jsonArray.get(index)).optString(key)) - .collect(Collectors.toList()); - } - -} diff --git a/json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java b/json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java deleted file mode 100644 index 8aa1d41afb54..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/JSONObjectDemo.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.jsonjava; - -import java.util.HashMap; -import java.util.Map; - -import org.json.JSONObject; - -public class JSONObjectDemo { - public static void main(String[] args) { - System.out.println("4.1. Creating JSONObject: "); - jsonFromJSONObject(); - - System.out.println("\n4.2. Creating JSONObject from Map: "); - jsonFromMap(); - - System.out.println("\n4.3. Creating JSONObject from JSON string: "); - jsonFromJSONString(); - } - - public static void jsonFromJSONObject() { - JSONObject jo = new JSONObject(); - jo.put("name", "jon doe"); - jo.put("age", "22"); - jo.put("city", "chicago"); - - System.out.println(jo.toString()); - } - - public static void jsonFromMap() { - Map map = new HashMap<>(); - map.put("name", "jon doe"); - map.put("age", "22"); - map.put("city", "chicago"); - JSONObject jo = new JSONObject(map); - - System.out.println(jo.toString()); - } - - public static void jsonFromJSONString() { - JSONObject jo = new JSONObject( - "{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}" - ); - - System.out.println(jo.toString()); - } -} diff --git a/json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java b/json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java deleted file mode 100644 index fb9fea959c3c..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/JSONTokenerDemo.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.JSONTokener; - -public class JSONTokenerDemo { - public static void main(String[] args) { - JSONTokener jt = new JSONTokener("Sample String"); - - while(jt.more()) { - System.out.println(jt.next()); - } - } -} diff --git a/json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java b/json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java deleted file mode 100644 index e9820c462a4c..000000000000 --- a/json/src/main/java/com/baeldung/jsonjava/ObjectToFromJSON.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.JSONObject; - -public class ObjectToFromJSON { - - public static void main(String args[]) throws Exception { - System.out.println("\n5.1. Creating JSONObject from Java Bean: "); - jsonFromDemoBean(); - } - - public static void jsonFromDemoBean() { - DemoBean demo = new DemoBean(); - demo.setId(1); - demo.setName("lorem ipsum"); - demo.setActive(true); - - JSONObject jo = new JSONObject(demo); - System.out.println(jo); - } -} diff --git a/json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java b/json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java deleted file mode 100644 index 0ff865065251..000000000000 --- a/json/src/main/java/com/baeldung/jsonobject/iterate/JSONObjectIterator.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.jsonobject.iterate; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.json.JSONArray; -import org.json.JSONObject; - -public class JSONObjectIterator { - - private Map keyValuePairs; - - public JSONObjectIterator() { - keyValuePairs = new HashMap<>(); - } - - public void handleValue(String key, Object value) { - if (value instanceof JSONArray) { - handleJSONArray(key, (JSONArray) value); - } else if (value instanceof JSONObject) { - handleJSONObject((JSONObject) value); - } - keyValuePairs.put(key, value); - } - - public void handleJSONObject(JSONObject jsonObject) { - Iterator jsonObjectIterator = jsonObject.keys(); - jsonObjectIterator.forEachRemaining(key -> { - Object value = jsonObject.get(key); - handleValue(key, value); - }); - } - - public void handleJSONArray(String key, JSONArray jsonArray) { - Iterator jsonArrayIterator = jsonArray.iterator(); - jsonArrayIterator.forEachRemaining(element -> { - handleValue(key, element); - }); - } - - public Map getKeyValuePairs() { - return keyValuePairs; - } - - public void setKeyValuePairs(Map keyValuePairs) { - this.keyValuePairs = keyValuePairs; - } - -} diff --git a/json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java b/json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java deleted file mode 100644 index 4398aa786763..000000000000 --- a/json/src/main/java/com/baeldung/jsonpointer/JsonPointerCrud.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.baeldung.jsonpointer; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; - -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonPointer; -import javax.json.JsonReader; -import javax.json.JsonString; -import javax.json.JsonStructure; - -public class JsonPointerCrud { - - private JsonStructure jsonStructure = null; - - public JsonPointerCrud(String fileName) throws IOException { - - try (JsonReader reader = Json.createReader(Files.newBufferedReader(Paths.get(fileName)))) { - jsonStructure = reader.read(); - } catch (FileNotFoundException e) { - System.out.println("Error to open json file: " + e.getMessage()); - } - - } - - public JsonPointerCrud(InputStream stream) { - - JsonReader reader = Json.createReader(stream); - jsonStructure = reader.read(); - reader.close(); - - } - - public JsonStructure insert(String key, String value) { - - JsonPointer jsonPointer = Json.createPointer("/" + key); - JsonString jsonValue = Json.createValue(value); - jsonStructure = jsonPointer.add(jsonStructure, jsonValue); - - return jsonStructure; - - } - - public JsonStructure update(String key, String newValue) { - - JsonPointer jsonPointer = Json.createPointer("/" + key); - JsonString jsonNewValue = Json.createValue(newValue); - jsonStructure = jsonPointer.replace(jsonStructure, jsonNewValue); - - return jsonStructure; - } - - public JsonStructure delete(String key) { - - JsonPointer jsonPointer = Json.createPointer("/" + key); - jsonPointer.getValue(jsonStructure); - jsonStructure = jsonPointer.remove(jsonStructure); - - return jsonStructure; - - } - - public String fetchValueFromKey(String key) { - JsonPointer jsonPointer = Json.createPointer("/" + key); - JsonString jsonString = (JsonString) jsonPointer.getValue(jsonStructure); - - return jsonString.getString(); - } - - public String fetchListValues(String key) { - JsonPointer jsonPointer = Json.createPointer("/" + key); - JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); - - return jsonObject.toString(); - } - - public String fetchFullJSON() { - JsonPointer jsonPointer = Json.createPointer(""); - JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); - - return jsonObject.toString(); - - } - - public boolean check(String key) { - JsonPointer jsonPointer = Json.createPointer("/" + key); - boolean found = jsonPointer.containsValue(jsonStructure); - - return found; - } -} diff --git a/json/src/main/resources/logback.xml b/json/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/json/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/json/src/main/webapp/index.html b/json/src/main/webapp/index.html deleted file mode 100644 index 5c41c8a1739d..000000000000 --- a/json/src/main/webapp/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - Introduction to JSONForms - - - - - - -
-
-
-
-
-

Introduction to JSONForms

-
-
- Bound data: {{data}} - -
-
-
-
-
- - diff --git a/json/src/main/webapp/js/app.js b/json/src/main/webapp/js/app.js deleted file mode 100644 index 484637bef49c..000000000000 --- a/json/src/main/webapp/js/app.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var app = angular.module('jsonforms-intro', ['jsonforms']); -app.controller('MyController', ['$scope', 'Schema', 'UISchema', function($scope, Schema, UISchema) { - - $scope.schema = Schema; - - $scope.uiSchema = UISchema; - - $scope.data = { - "id": 1, - "name": "Lampshade", - "price": 1.85 - }; -}]); diff --git a/json/src/main/webapp/js/schema.js b/json/src/main/webapp/js/schema.js deleted file mode 100644 index 34025868b948..000000000000 --- a/json/src/main/webapp/js/schema.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var app = angular.module('jsonforms-intro'); -app.value('Schema', - { - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Product", - "description": "A product from the catalog", - "type": "object", - "properties": { - "id": { - "description": "The unique identifier for a product", - "type": "integer" - }, - "name": { - "description": "Name of the product", - "type": "string" - }, - "price": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - }, - "required": ["id", "name", "price"] - } -); diff --git a/json/src/main/webapp/js/ui-schema.js b/json/src/main/webapp/js/ui-schema.js deleted file mode 100644 index aea5ac79c0c2..000000000000 --- a/json/src/main/webapp/js/ui-schema.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var app = angular.module('jsonforms-intro'); -app.value('UISchema', - { - "type": "HorizontalLayout", - "elements": [ - { - "type": "Control", - "scope": { "$ref": "#/properties/id" } - }, - { - "type": "Control", - "scope": { "$ref": "#/properties/name" } - }, - { - "type": "Control", - "scope": { "$ref": "#/properties/price" } - }, - ] - } -); diff --git a/json/src/main/webapp/package.json b/json/src/main/webapp/package.json deleted file mode 100644 index 2f2d6c9ffabd..000000000000 --- a/json/src/main/webapp/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "jsonforms-intro", - "description": "Introduction to JSONForms", - "version": "0.0.1", - "license": "MIT", - "dependencies": { - "typings": "0.6.5", - "jsonforms": "0.0.19", - "bootstrap": "3.3.6" - } -} \ No newline at end of file diff --git a/json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java b/json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java deleted file mode 100644 index e959fa227b63..000000000000 --- a/json/src/test/java/com/baeldung/escape/JsonEscapeUnitTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.escape; - -import com.fasterxml.jackson.core.JsonProcessingException; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class JsonEscapeUnitTest { - - private JsonEscape testedInstance; - private static final String EXPECTED = "{\"message\":\"Hello \\\"World\\\"\"}"; - - @BeforeEach - void setUp() { - testedInstance = new JsonEscape(); - } - - @Test - void escapeJson() { - String actual = testedInstance.escapeJson("Hello \"World\""); - assertEquals(EXPECTED, actual); - } - - @Test - void escapeGson() { - String actual = testedInstance.escapeGson("Hello \"World\""); - assertEquals(EXPECTED, actual); - } - - @Test - void escapeJackson() throws JsonProcessingException { - String actual = testedInstance.escapeJackson("Hello \"World\""); - assertEquals(EXPECTED, actual); - } -} \ No newline at end of file diff --git a/json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java b/json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java deleted file mode 100644 index 393e052b95ba..000000000000 --- a/json/src/test/java/com/baeldung/json/schema/JSONSchemaUnitTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.json.schema; - -import org.everit.json.schema.Schema; -import org.everit.json.schema.ValidationException; -import org.everit.json.schema.loader.SchemaLoader; - -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.Test; - -public class JSONSchemaUnitTest { - - @Test(expected = ValidationException.class) - public void givenInvalidInput_whenValidating_thenInvalid() { - - JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/schema.json"))); - JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/product_invalid.json"))); - - Schema schema = SchemaLoader.load(jsonSchema); - schema.validate(jsonSubject); - } - - @Test - public void givenValidInput_whenValidating_thenValid() { - - JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/schema.json"))); - JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaUnitTest.class.getResourceAsStream("/product_valid.json"))); - - Schema schema = SchemaLoader.load(jsonSchema); - schema.validate(jsonSubject); - } -} diff --git a/json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java b/json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java deleted file mode 100644 index f258700c6b47..000000000000 --- a/json/src/test/java/com/baeldung/jsonb/JsonbUnitTest.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.baeldung.jsonb; - -import static org.junit.Assert.assertTrue; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.json.bind.Jsonb; -import javax.json.bind.JsonbBuilder; -import javax.json.bind.JsonbConfig; -import javax.json.bind.config.PropertyNamingStrategy; -import javax.json.bind.config.PropertyOrderStrategy; - -import org.apache.commons.collections4.ListUtils; -import org.junit.Test; - -import com.baeldung.adapter.PersonAdapter; -import com.baeldung.jsonb.Person; - -public class JsonbUnitTest { - - @Test - public void givenPersonList_whenSerializeWithJsonb_thenGetPersonJsonArray() { - Jsonb jsonb = JsonbBuilder.create(); - // @formatter:off - List personList = Arrays.asList( - new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), - new Person(2, "Jhon", "jhon1@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), - new Person(3, "Jhon", null, 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), - new Person(4, "Tom", "tom@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500))); - // @formatter:on - String jsonArrayPerson = jsonb.toJson(personList); - // @formatter:off - String jsonExpected = "[" + - "{\"email\":\"jhon@test.com\"," + - "\"id\":1,\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1000.0\"}," + - "{\"email\":\"jhon1@test.com\"," + - "\"id\":2,\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1500.0\"},{\"email\":null," + - "\"id\":3,\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1000.0\"}," + - "{\"email\":\"tom@test.com\"," + - "\"id\":4,\"person-name\":\"Tom\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1500.0\"}" - + "]"; - // @formatter:on - assertTrue(jsonArrayPerson.equals(jsonExpected)); - } - - @Test - public void givenPersonJsonArray_whenDeserializeWithJsonb_thenGetPersonList() { - Jsonb jsonb = JsonbBuilder.create(); - // @formatter:off - String personJsonArray = - "[" + - "{\"email\":\"jhon@test.com\"," + - "\"id\":1,\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1000.0\"}," + - "{\"email\":\"jhon1@test.com\"," + - "\"id\":2,\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1500.0\"},{\"email\":null," + - "\"id\":3,\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1000.0\"}," + - "{\"email\":\"tom@test.com\"," + - "\"id\":4,\"person-name\":\"Tom\"," + - "\"registeredDate\":\"09-09-2019\"," + - "\"salary\":\"1500.0\"}" - + "]"; - // @formatter:on - @SuppressWarnings("serial") - List personList = jsonb.fromJson(personJsonArray, new ArrayList() { - }.getClass() - .getGenericSuperclass()); - // @formatter:off - List personListExpected = Arrays.asList( - new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), - new Person(2, "Jhon", "jhon1@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), - new Person(3, "Jhon", null, 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), - new Person(4, "Tom", "tom@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500))); - // @formatter:on - assertTrue(ListUtils.isEqualList(personList, personListExpected)); - } - - @Test - public void givenPersonObject_whenNamingStrategy_thenGetCustomPersonJson() { - JsonbConfig config = new JsonbConfig().withPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE_WITH_UNDERSCORES); - Jsonb jsonb = JsonbBuilder.create(config); - Person person = new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); - String jsonPerson = jsonb.toJson(person); - // @formatter:off - String jsonExpected = - "{\"email\":\"jhon@test.com\"," + - "\"id\":1," + - "\"person-name\":\"Jhon\"," + - "\"registered_date\":\"07-09-2019\"," + - "\"salary\":\"1000.0\"}"; - // @formatter:on - assertTrue(jsonExpected.equals(jsonPerson)); - } - - @Test - public void givenPersonObject_whenWithPropertyOrderStrategy_thenGetReversePersonJson() { - JsonbConfig config = new JsonbConfig().withPropertyOrderStrategy(PropertyOrderStrategy.REVERSE); - Jsonb jsonb = JsonbBuilder.create(config); - Person person = new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); - String jsonPerson = jsonb.toJson(person); - // @formatter:off - String jsonExpected = - "{\"salary\":\"1000.0\","+ - "\"registeredDate\":\"07-09-2019\"," + - "\"person-name\":\"Jhon\"," + - "\"id\":1," + - "\"email\":\"jhon@test.com\"}"; - // @formatter:on - assertTrue(jsonExpected.equals(jsonPerson)); - } - - @Test - public void givenPersonObject_whenSerializeWithJsonb_thenGetPersonJson() { - Jsonb jsonb = JsonbBuilder.create(); - Person person = new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); - String jsonPerson = jsonb.toJson(person); - // @formatter:off - String jsonExpected = - "{\"email\":\"jhon@test.com\"," + - "\"id\":1," + - "\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"07-09-2019\"," + - "\"salary\":\"1000.0\"}"; - // @formatter:on - assertTrue(jsonExpected.equals(jsonPerson)); - } - - @Test - public void givenPersonJson_whenDeserializeWithJsonb_thenGetPersonObject() { - Jsonb jsonb = JsonbBuilder.create(); - Person person = new Person(1, "Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0)); - // @formatter:off - String jsonPerson = - "{\"email\":\"jhon@test.com\"," + - "\"id\":1," + - "\"person-name\":\"Jhon\"," + - "\"registeredDate\":\"07-09-2019\"," + - "\"salary\":\"1000.0\"}"; - // @formatter:on - assertTrue(jsonb.fromJson(jsonPerson, Person.class) - .equals(person)); - } - - @Test - public void givenPersonObject_whenSerializeWithAdapter_thenGetPersonJson() { - JsonbConfig config = new JsonbConfig().withAdapters(new PersonAdapter()); - Jsonb jsonb = JsonbBuilder.create(config); - Person person = new Person(1, "Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0));// new Person(1, "Jhon"); - String jsonPerson = jsonb.toJson(person); - // @formatter:off - String jsonExpected = - "{\"id\":1," + - "\"name\":\"Jhon\"}"; - // @formatter:on - assertTrue(jsonExpected.equals(jsonPerson)); - } - - @Test - public void givenPersonJson_whenDeserializeWithAdapter_thenGetPersonObject() { - JsonbConfig config = new JsonbConfig().withAdapters(new PersonAdapter()); - Jsonb jsonb = JsonbBuilder.create(config); - Person person = new Person(1, "Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0));// new Person(1, "Jhon"); - // @formatter:off - String jsonPerson = - "{\"id\":1," + - "\"name\":\"Jhon\"}"; - // @formatter:on - assertTrue(jsonb.fromJson(jsonPerson, Person.class) - .equals(person)); - } - -} diff --git a/json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java b/json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java deleted file mode 100644 index 4698b29c6e91..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/CDLIntegrationTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.CDL; -import org.json.JSONArray; -import org.json.JSONTokener; -import org.junit.Test; - -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; -import static org.assertj.core.api.Assertions.assertThat; - -public class CDLIntegrationTest { - - @Test - public void givenCommaDelimitedText_thenConvertToJSONArray() { - JSONArray ja = CDL.rowToJSONArray(new JSONTokener("England, USA, Canada")); - - assertThatJson(ja) - .isEqualTo("[\"England\",\"USA\",\"Canada\"]"); - } - - @Test - public void givenJSONArray_thenConvertToCommaDelimitedText() { - JSONArray ja = new JSONArray("[\"England\",\"USA\",\"Canada\"]"); - - String cdt = CDL.rowToString(ja); - - assertThat(cdt.trim()).isEqualTo("England,USA,Canada"); - } - - @Test - public void givenCommaDelimitedText_thenGetJSONArrayOfJSONObjects() { - String string = - "name, city, age \n" + - "john, chicago, 22 \n" + - "gary, florida, 35 \n" + - "sal, vegas, 18"; - - JSONArray result = CDL.toJSONArray(string); - - assertThatJson(result) - .isEqualTo("[{\"name\":\"john\",\"city\":\"chicago\",\"age\":\"22\"},{\"name\":\"gary\",\"city\":\"florida\",\"age\":\"35\"},{\"name\":\"sal\",\"city\":\"vegas\",\"age\":\"18\"}]"); - } - - @Test - public void givenCommaDelimitedText_thenGetJSONArrayOfJSONObjects2() { - JSONArray ja = new JSONArray(); - ja.put("name"); - ja.put("city"); - ja.put("age"); - - String string = - "john, chicago, 22 \n" + - "gary, florida, 35 \n" + - "sal, vegas, 18"; - - JSONArray result = CDL.toJSONArray(ja, string); - - assertThatJson(result) - .isEqualTo("[{\"name\":\"john\",\"city\":\"chicago\",\"age\":\"22\"},{\"name\":\"gary\",\"city\":\"florida\",\"age\":\"35\"},{\"name\":\"sal\",\"city\":\"vegas\",\"age\":\"18\"}]"); - } - -} diff --git a/json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java b/json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java deleted file mode 100644 index accb94e7325f..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/CookieIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.jsonjava; - -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; -import static org.assertj.core.api.Assertions.assertThat; - -import org.json.Cookie; -import org.json.JSONObject; -import org.junit.Test; - -public class CookieIntegrationTest { - - @Test - public void givenCookieString_thenConvertToJSONObject() { - String cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; - JSONObject cookieJO = Cookie.toJSONObject(cookie); - - assertThatJson(cookieJO) - .isEqualTo("{\"path\":\"/\",\"expires\":\"Thu, 18 Dec 2013 12:00:00 UTC\",\"name\":\"username\",\"value\":\"John Doe\"}"); - } - - @Test - public void givenJSONObject_thenConvertToCookieString() { - JSONObject cookieJO = new JSONObject(); - cookieJO.put("name", "username"); - cookieJO.put("value", "John Doe"); - cookieJO.put("expires", "Thu, 18 Dec 2013 12:00:00 UTC"); - cookieJO.put("path", "/"); - - String cookie = Cookie.toString(cookieJO); - - assertThat(cookie.split(";")) - .containsExactlyInAnyOrder("username=John Doe", "path=/", "expires=Thu, 18 Dec 2013 12:00:00 UTC"); - } -} diff --git a/json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java b/json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java deleted file mode 100644 index ad84c22cca01..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/HTTPIntegrationTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.HTTP; -import org.json.JSONObject; -import org.junit.Test; - -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; -import static org.assertj.core.api.Assertions.assertThat; - -public class HTTPIntegrationTest { - @Test - public void givenJSONObject_thenConvertToHTTPHeader() { - JSONObject jo = new JSONObject(); - jo.put("Method", "POST"); - jo.put("Request-URI", "http://www.example.com/"); - jo.put("HTTP-Version", "HTTP/1.1"); - - assertThat(HTTP.toString(jo)) - .isEqualTo("POST \"http://www.example.com/\" HTTP/1.1" + HTTP.CRLF + HTTP.CRLF); - } - - @Test - public void givenHTTPHeader_thenConvertToJSONObject() { - JSONObject obj = HTTP.toJSONObject("POST \"http://www.example.com/\" HTTP/1.1"); - - assertThatJson(obj) - .isEqualTo("{\"Request-URI\":\"http://www.example.com/\",\"Method\":\"POST\",\"HTTP-Version\":\"HTTP/1.1\"}"); - } -} diff --git a/json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java b/json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java deleted file mode 100644 index 7ea22b94bae8..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/JSONArrayGetValueByKeyUnitTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.jsonjava; - -import org.junit.Test; - -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class JSONArrayGetValueByKeyUnitTest { - - private static final JSONArrayGetValueByKey obj = new JSONArrayGetValueByKey(); - - @Test - public void givenJSONArrayAndAKey_thenReturnAllValuesForGivenKey() { - String jsonStr = "[" + " {" + " \"name\": \"John\"," + " \"city\": \"chicago\"," + " \"age\": \"22\" " + "}," + " { " + "\"name\": \"Gary\"," + " \"city\": \"florida\"," + " \"age\": \"35\" " + "}," + " { " + "\"name\": \"Selena\"," - + " \"city\": \"vegas\"," + " \"age\": \"18\" " + "} " + "]"; - - List actualValues = obj.getValuesByKeyInJSONArray(jsonStr, "name"); - - assertThat(actualValues) - .containsExactlyInAnyOrder("John", "Gary", "Selena"); - } - - @Test - public void givenJSONArrayAndAKey_whenUsingJava8Syntax_thenReturnAllValuesForGivenKey() { - String jsonStr = "[" + " {" + " \"name\": \"John\"," + " \"city\": \"chicago\"," + " \"age\": \"22\" " + "}," + " { " + "\"name\": \"Gary\"," + " \"city\": \"florida\"," + " \"age\": \"35\" " + "}," + " { " + "\"name\": \"Selena\"," - + " \"city\": \"vegas\"," + " \"age\": \"18\" " + "} " + "]"; - - List actualValues = obj.getValuesByKeyInJSONArrayUsingJava8(jsonStr, "name"); - - assertThat(actualValues) - .containsExactlyInAnyOrder("John", "Gary", "Selena"); - } - -} diff --git a/json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java b/json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java deleted file mode 100644 index eed7779e2717..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/JSONArrayIntegrationTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; - -public class JSONArrayIntegrationTest { - - @Test - public void givenJSONJava_thenCreateNewJSONArrayFromScratch() { - JSONArray ja = new JSONArray(); - ja.put(Boolean.TRUE); - ja.put("lorem ipsum"); - - // We can also put a JSONObject in JSONArray - JSONObject jo = new JSONObject(); - jo.put("name", "jon doe"); - jo.put("age", "22"); - jo.put("city", "chicago"); - - ja.put(jo); - - assertThatJson(ja) - .isEqualTo("[true,\"lorem ipsum\",{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}]"); - } - - @Test - public void givenJsonString_thenCreateNewJSONArray() { - JSONArray ja = new JSONArray("[true, \"lorem ipsum\", 215]"); - - assertThatJson(ja) - .isEqualTo("[true,\"lorem ipsum\",215]"); - } - - @Test - public void givenListObject_thenConvertItToJSONArray() { - List list = new ArrayList<>(); - list.add("California"); - list.add("Texas"); - list.add("Hawaii"); - list.add("Alaska"); - - JSONArray ja = new JSONArray(list); - - assertThatJson(ja) - .isEqualTo("[\"California\",\"Texas\",\"Hawaii\",\"Alaska\"]"); - } -} \ No newline at end of file diff --git a/json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java b/json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java deleted file mode 100644 index 4a435a90d3a5..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/JSONObjectIntegrationTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.JSONObject; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; - -public class JSONObjectIntegrationTest { - - @Test - public void givenJSONJava_thenCreateNewJSONObject() { - JSONObject jo = new JSONObject(); - jo.put("name", "jon doe"); - jo.put("age", "22"); - jo.put("city", "chicago"); - - assertThatJson(jo) - .isEqualTo("{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}"); - } - - @Test - public void givenMapObject_thenCreateJSONObject() { - Map map = new HashMap<>(); - map.put("name", "jon doe"); - map.put("age", "22"); - map.put("city", "chicago"); - JSONObject jo = new JSONObject(map); - - assertThatJson(jo) - .isEqualTo("{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}"); - } - - @Test - public void givenJsonString_thenCreateJSONObject() { - JSONObject jo = new JSONObject( - "{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}" - ); - - assertThatJson(jo) - .isEqualTo("{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}"); - } -} diff --git a/json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java b/json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java deleted file mode 100644 index 3bd73ca4c27d..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/JSONTokenerIntegrationTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.JSONTokener; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class JSONTokenerIntegrationTest { - - @Test - public void givenString_convertItToJSONTokens() { - String str = "Sample String"; - JSONTokener jt = new JSONTokener(str); - - char[] expectedTokens = str.toCharArray(); - int index = 0; - - while (jt.more()) { - assertThat(jt.next()).isEqualTo(expectedTokens[index++]); - } - } -} diff --git a/json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java b/json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java deleted file mode 100644 index d1f536d31a17..000000000000 --- a/json/src/test/java/com/baeldung/jsonjava/ObjectToFromJSONIntegrationTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.jsonjava; - -import org.json.JSONObject; -import org.junit.Test; - -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; - -public class ObjectToFromJSONIntegrationTest { - - @Test - public void givenDemoBean_thenCreateJSONObject() { - DemoBean demo = new DemoBean(); - demo.setId(1); - demo.setName("lorem ipsum"); - demo.setActive(true); - - JSONObject jo = new JSONObject(demo); - - assertThatJson(jo) - .isEqualTo("{\"name\":\"lorem ipsum\",\"active\":true,\"id\":1}"); - } -} diff --git a/json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java b/json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java deleted file mode 100644 index 55cfdab53be9..000000000000 --- a/json/src/test/java/com/baeldung/jsonobject/iterate/JSONObjectIteratorUnitTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.baeldung.jsonobject.iterate; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.Map; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.junit.Test; - -public class JSONObjectIteratorUnitTest { - - private JSONObjectIterator jsonObjectIterator = new JSONObjectIterator(); - - @Test - public void givenJSONObject_whenIterating_thenGetKeyValuePairs() { - JSONObject jsonObject = getJsonObject(); - - jsonObjectIterator.handleJSONObject(jsonObject); - - Map keyValuePairs = jsonObjectIterator.getKeyValuePairs(); - assertThat(keyValuePairs.get("rType")).isEqualTo("Regular"); - assertThat(keyValuePairs.get("rId")).isEqualTo("1001"); - assertThat(keyValuePairs.get("cType")).isEqualTo("Chocolate"); - assertThat(keyValuePairs.get("cId")).isEqualTo("1002"); - assertThat(keyValuePairs.get("bType")).isEqualTo("BlueBerry"); - assertThat(keyValuePairs.get("bId")).isEqualTo("1003"); - assertThat(keyValuePairs.get("name")).isEqualTo("Cake"); - assertThat(keyValuePairs.get("cakeId")).isEqualTo("0001"); - assertThat(keyValuePairs.get("type")).isEqualTo("donut"); - assertThat(keyValuePairs.get("Type")).isEqualTo("Maple"); - assertThat(keyValuePairs.get("tId")).isEqualTo("5001"); - assertThat(keyValuePairs.get("batters") - .toString()).isEqualTo("[{\"rType\":\"Regular\",\"rId\":\"1001\"},{\"cType\":\"Chocolate\",\"cId\":\"1002\"},{\"bType\":\"BlueBerry\",\"bId\":\"1003\"}]"); - assertThat(keyValuePairs.get("cakeShapes") - .toString()).isEqualTo("[\"square\",\"circle\",\"heart\"]"); - assertThat(keyValuePairs.get("topping") - .toString()).isEqualTo("{\"Type\":\"Maple\",\"tId\":\"5001\"}"); - } - - private JSONObject getJsonObject() { - JSONObject cake = new JSONObject(); - cake.put("cakeId", "0001"); - cake.put("type", "donut"); - cake.put("name", "Cake"); - - JSONArray batters = new JSONArray(); - JSONObject regular = new JSONObject(); - regular.put("rId", "1001"); - regular.put("rType", "Regular"); - batters.put(regular); - JSONObject chocolate = new JSONObject(); - chocolate.put("cId", "1002"); - chocolate.put("cType", "Chocolate"); - batters.put(chocolate); - JSONObject blueberry = new JSONObject(); - blueberry.put("bId", "1003"); - blueberry.put("bType", "BlueBerry"); - batters.put(blueberry); - - JSONArray cakeShapes = new JSONArray(); - cakeShapes.put("square"); - cakeShapes.put("circle"); - cakeShapes.put("heart"); - - cake.put("cakeShapes", cakeShapes); - - cake.put("batters", batters); - - JSONObject topping = new JSONObject(); - topping.put("tId", "5001"); - topping.put("Type", "Maple"); - - cake.put("topping", topping); - - return cake; - } - -} diff --git a/json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java b/json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java deleted file mode 100644 index c1553db325ec..000000000000 --- a/json/src/test/java/com/baeldung/jsonpointer/JsonPointerCrudUnitTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jsonpointer; - -import static org.junit.Assert.*; - -import org.junit.Test; - -public class JsonPointerCrudUnitTest { - - @Test - public void testJsonPointerCrudForAddress() { - - JsonPointerCrud jsonPointerCrud = new JsonPointerCrud(JsonPointerCrudUnitTest.class.getResourceAsStream("/address.json")); - - assertFalse(jsonPointerCrud.check("city")); - - // insert a value - jsonPointerCrud.insert("city", "Rio de Janeiro"); - - assertTrue(jsonPointerCrud.check("city")); - - // fetch full json - String fullJSON = jsonPointerCrud.fetchFullJSON(); - - assertTrue(fullJSON.contains("name")); - - assertTrue(fullJSON.contains("city")); - - // fetch value - String cityName = jsonPointerCrud.fetchValueFromKey("city"); - - assertEquals(cityName, "Rio de Janeiro"); - - // update value - jsonPointerCrud.update("city", "Sao Paulo"); - - // fetch value - cityName = jsonPointerCrud.fetchValueFromKey("city"); - - assertEquals(cityName, "Sao Paulo"); - - // delete - jsonPointerCrud.delete("city"); - - assertFalse(jsonPointerCrud.check("city")); - - } - - @Test - public void testJsonPointerCrudForBooks() { - - JsonPointerCrud jsonPointerCrud = new JsonPointerCrud(JsonPointerCrudUnitTest.class.getResourceAsStream("/books.json")); - - // fetch value - String book = jsonPointerCrud.fetchListValues("books/1"); - - assertEquals(book, "{\"title\":\"Title 2\",\"author\":\"John Doe\"}"); - - } -} \ No newline at end of file diff --git a/json/src/test/resources/address.json b/json/src/test/resources/address.json deleted file mode 100644 index 599fcae12bb6..000000000000 --- a/json/src/test/resources/address.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "Customer 01", - "street name": "Street 01" -} \ No newline at end of file diff --git a/json/src/test/resources/books.json b/json/src/test/resources/books.json deleted file mode 100644 index 0defc3de981b..000000000000 --- a/json/src/test/resources/books.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "library": "My Personal Library", - "books": [ - { "title":"Title 1", "author":"Jane Doe" }, - { "title":"Title 2", "author":"John Doe" } - ] -} \ No newline at end of file diff --git a/json/src/test/resources/product_invalid.json b/json/src/test/resources/product_invalid.json deleted file mode 100644 index 7c55d8c7a512..000000000000 --- a/json/src/test/resources/product_invalid.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": 1, - "name": "Lampshade", - "price": 0 -} diff --git a/json/src/test/resources/product_valid.json b/json/src/test/resources/product_valid.json deleted file mode 100644 index e0697dc4c26d..000000000000 --- a/json/src/test/resources/product_valid.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": 1, - "name": "Lampshade", - "price": 10 -} diff --git a/json/src/test/resources/schema.json b/json/src/test/resources/schema.json deleted file mode 100644 index 7cf99d76e035..000000000000 --- a/json/src/test/resources/schema.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Product", - "description": "A product from the catalog", - "type": "object", - "properties": { - "id": { - "description": "The unique identifier for a product", - "type": "integer" - }, - "name": { - "description": "Name of the product", - "type": "string" - }, - "price": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - }, - "required": ["id", "name", "price"] -} From ac48bcc54b738c21a822ae8b9418faafd01313c8 Mon Sep 17 00:00:00 2001 From: panagiotiskakos Date: Sat, 25 Jun 2022 06:46:26 +0300 Subject: [PATCH 7/7] removed version --- json-modules/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/json-modules/pom.xml b/json-modules/pom.xml index 6d18738a5111..171086db2eba 100644 --- a/json-modules/pom.xml +++ b/json-modules/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 json-modules - 1.0.0-SNAPSHOT json-modules pom