diff --git a/json/README.md b/json/README.md new file mode 100644 index 0000000000..c47eca3e84 --- /dev/null +++ b/json/README.md @@ -0,0 +1,7 @@ +========= + +## Fast-Json + +### Relevant Articles: +- [Introduction to JSON Schema in Java](http://www.baeldung.com/introduction-to-json-schema-in-java) +- [A Guide to FastJson](http://www.baeldung.com/????????) diff --git a/json/pom.xml b/json/pom.xml index 47f1f25aa2..4d9efe56e4 100644 --- a/json/pom.xml +++ b/json/pom.xml @@ -13,6 +13,12 @@ 1.3.0 + + com.alibaba + fastjson + 1.2.13 + + junit junit diff --git a/json/src/test/java/org/baeldung/json/schema/JSONSchemaTest.java b/json/src/test/java/com/baeldung/json/schema/JSONSchemaTest.java similarity index 88% rename from json/src/test/java/org/baeldung/json/schema/JSONSchemaTest.java rename to json/src/test/java/com/baeldung/json/schema/JSONSchemaTest.java index 273fd48bac..bd4aaee682 100644 --- a/json/src/test/java/org/baeldung/json/schema/JSONSchemaTest.java +++ b/json/src/test/java/com/baeldung/json/schema/JSONSchemaTest.java @@ -1,31 +1,32 @@ -package org.baeldung.json.schema; - -import org.everit.json.schema.Schema; -import org.everit.json.schema.loader.SchemaLoader; - -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.Test; - -public class JSONSchemaTest { - - @Test - public void givenInvalidInput_whenValidating_thenInvalid() { - - JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/schema.json"))); - JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaTest.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(JSONSchemaTest.class.getResourceAsStream("/schema.json"))); - JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/product_valid.json"))); - - Schema schema = SchemaLoader.load(jsonSchema); - schema.validate(jsonSubject); - } -} +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 JSONSchemaTest { + + @Test(expected = ValidationException.class) + public void givenInvalidInput_whenValidating_thenInvalid() { + + JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/schema.json"))); + JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaTest.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(JSONSchemaTest.class.getResourceAsStream("/schema.json"))); + JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/product_valid.json"))); + + Schema schema = SchemaLoader.load(jsonSchema); + schema.validate(jsonSubject); + } +} diff --git a/json/src/test/java/fast_json/FastJsonTests.java b/json/src/test/java/fast_json/FastJsonTests.java new file mode 100644 index 0000000000..7b7e3c0434 --- /dev/null +++ b/json/src/test/java/fast_json/FastJsonTests.java @@ -0,0 +1,104 @@ +package fast_json; + +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 FastJsonTests { + 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/src/test/java/fast_json/Person.java b/json/src/test/java/fast_json/Person.java new file mode 100644 index 0000000000..0eac58cdfd --- /dev/null +++ b/json/src/test/java/fast_json/Person.java @@ -0,0 +1,70 @@ +package fast_json; + +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/pom.xml b/pom.xml index 82cf85208c..469e0a0b74 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ jjwt jooq-spring json-path + json mockito mocks jee7schedule