diff --git a/README.md b/README.md index 35f853a..2a3fa0d 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ It covers the following libraries: * [dsl-json](https://github.com/ngs-doo/dsl-json) * [fastjson](https://github.com/alibaba/fastjson) * [flexjson](http://flexjson.sourceforge.net/) +* [fory-json](https://fory.apache.org/docs/json/) * [genson](https://owlike.github.io/genson/) * [gson](https://github.com/google/gson) * [jackson](https://github.com/FasterXML/jackson) diff --git a/build.gradle b/build.gradle index e2f81e9..487b049 100644 --- a/build.gradle +++ b/build.gradle @@ -56,6 +56,8 @@ dependencies { implementation 'com.alibaba.fastjson2:fastjson2:2.0.57' // FlexJson implementation 'net.sf.flexjson:flexjson:3.3' + // Fory JSON + implementation 'org.apache.fory:fory-json:1.6.0' // GENSON implementation 'com.owlike:genson:1.6' // GSON diff --git a/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java b/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java index 5b31c80..0ac12a7 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java +++ b/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java @@ -53,6 +53,10 @@ public Object flexjson() throws Exception { return null; } + public Object foryjson() throws Exception { + return null; + } + public Object fastjson() throws Exception { return null; } diff --git a/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java b/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java index a9e7689..e4ce68e 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java +++ b/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java @@ -74,6 +74,12 @@ public Object flexjson() throws JsonSyntaxException { return JSON_SOURCE().provider().flexjsonDeser().deserialize(JSON_SOURCE().nextReader(), JSON_SOURCE().pojoType()); } + @Benchmark + @Override + public Object foryjson() { + return JSON_SOURCE().provider().foryJson().fromJson(JSON_SOURCE().nextByteArray(), JSON_SOURCE().pojoType()); + } + @Benchmark @Override public Object boon() throws Exception { diff --git a/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java b/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java index ce9d477..70882e2 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java +++ b/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java @@ -90,6 +90,14 @@ public Object flexjson() { return b; } + @Benchmark + @Override + public Object foryjson() { + ByteArrayOutputStream baos = JsonUtils.byteArrayOutputStream(); + JSON_SOURCE().provider().foryJson().writeJsonTo(JSON_SOURCE().nextPojo(), baos); + return baos; + } + @Benchmark @Override public Object boon() { diff --git a/src/main/java/com/github/fabienrenaud/jjb/provider/ClientsJsonProvider.java b/src/main/java/com/github/fabienrenaud/jjb/provider/ClientsJsonProvider.java index b975419..66a368c 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/provider/ClientsJsonProvider.java +++ b/src/main/java/com/github/fabienrenaud/jjb/provider/ClientsJsonProvider.java @@ -102,6 +102,7 @@ public void transform(Object o) { .use(LocalDate.class, (objectBinder, o, type, aClass) -> LocalDate.parse((String) o)) .use(OffsetDateTime.class, (objectBinder, o, type, aClass) -> OffsetDateTime.parse((String) o)); + private final org.apache.fory.json.ForyJson foryJson = org.apache.fory.json.ForyJson.builder().build(); private final org.boon.json.ObjectMapper boon = org.boon.json.JsonFactory.create(); private final Mapper johnzon; private final com.squareup.moshi.JsonAdapter moshi = @@ -233,6 +234,11 @@ public JSONSerializer flexjsonSer() { return FLEXJSON_SER.get(); } + @Override + public org.apache.fory.json.ForyJson foryJson() { + return foryJson; + } + @Override public org.boon.json.ObjectMapper boon() { return boon; diff --git a/src/main/java/com/github/fabienrenaud/jjb/provider/JsonProvider.java b/src/main/java/com/github/fabienrenaud/jjb/provider/JsonProvider.java index 3807503..3a94bdf 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/provider/JsonProvider.java +++ b/src/main/java/com/github/fabienrenaud/jjb/provider/JsonProvider.java @@ -37,6 +37,8 @@ public interface JsonProvider { JSONSerializer flexjsonSer(); + org.apache.fory.json.ForyJson foryJson(); + org.boon.json.ObjectMapper boon(); Mapper johnzon(); diff --git a/src/main/java/com/github/fabienrenaud/jjb/provider/UsersJsonProvider.java b/src/main/java/com/github/fabienrenaud/jjb/provider/UsersJsonProvider.java index 9d96d4d..91085b6 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/provider/UsersJsonProvider.java +++ b/src/main/java/com/github/fabienrenaud/jjb/provider/UsersJsonProvider.java @@ -44,6 +44,7 @@ public class UsersJsonProvider implements JsonProvider { .withProvider(new org.glassfish.json.JsonProviderImpl()) .build(); private final JSONDeserializer flexjsonDeser = new JSONDeserializer<>(); + private final org.apache.fory.json.ForyJson foryJson = org.apache.fory.json.ForyJson.builder().build(); private final org.boon.json.ObjectMapper boon = org.boon.json.JsonFactory.create(); private final org.apache.johnzon.mapper.Mapper johnzon; private final com.squareup.moshi.JsonAdapter moshi = new Moshi.Builder().build().adapter(Users.class); @@ -123,6 +124,11 @@ public flexjson.JSONSerializer flexjsonSer() { return FLEXJSON_SER.get(); } + @Override + public org.apache.fory.json.ForyJson foryJson() { + return foryJson; + } + @Override public org.boon.json.ObjectMapper boon() { return boon; diff --git a/src/main/java/com/github/fabienrenaud/jjb/support/BenchSupport.java b/src/main/java/com/github/fabienrenaud/jjb/support/BenchSupport.java index e34ddf7..58f8d93 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/support/BenchSupport.java +++ b/src/main/java/com/github/fabienrenaud/jjb/support/BenchSupport.java @@ -17,6 +17,7 @@ public enum BenchSupport { new Libapi(Library.JAKARTAJSON, Api.STREAM), new Libapi(Library.FLEXJSON, Api.DATABIND), new Libapi(Library.FASTJSON, Api.DATABIND), + new Libapi(Library.FORYJSON, Api.DATABIND), new Libapi(Library.JSONIO, Api.DATABIND, Api.STREAM), new Libapi(Library.BOON, Api.DATABIND), new Libapi(Library.JOHNZON, Api.DATABIND), @@ -52,6 +53,7 @@ public enum BenchSupport { new Libapi(Library.JAKARTAJSON), new Libapi(Library.FLEXJSON, Api.DATABIND), new Libapi(Library.FASTJSON, Api.DATABIND), + new Libapi(Library.FORYJSON, Api.DATABIND), new Libapi(Library.JSONIO, Api.DATABIND), new Libapi(false, Library.BOON, Api.DATABIND), new Libapi(false, Library.JOHNZON, Api.DATABIND), diff --git a/src/main/java/com/github/fabienrenaud/jjb/support/Library.java b/src/main/java/com/github/fabienrenaud/jjb/support/Library.java index 2584454..bde2ef0 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/support/Library.java +++ b/src/main/java/com/github/fabienrenaud/jjb/support/Library.java @@ -15,6 +15,7 @@ public enum Library { JAKARTAJSON, FLEXJSON, FASTJSON, + FORYJSON, JSONIO, BOON, JOHNZON, diff --git a/src/test/java/com/github/fabienrenaud/jjb/JsonBenchmark.java b/src/test/java/com/github/fabienrenaud/jjb/JsonBenchmark.java index 8f45e1d..0a59874 100644 --- a/src/test/java/com/github/fabienrenaud/jjb/JsonBenchmark.java +++ b/src/test/java/com/github/fabienrenaud/jjb/JsonBenchmark.java @@ -133,6 +133,13 @@ public void fastjson() throws Exception { } } + @Test + public void foryjson() throws Exception { + for (int i = 0; i < ITERATIONS; i++) { + test(Library.FORYJSON, BENCH.foryjson()); + } + } + @Test public void jsonio() throws Exception { for (int i = 0; i < ITERATIONS; i++) {