JSONSchemaBenchmark2.java
package com.alibaba.fastjson2.benchmark.jsonschema;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.schema.JSONSchema;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.networknt.schema.JsonSchema;
import com.networknt.schema.JsonSchemaFactory;
import org.everit.json.schema.Schema;
import org.everit.json.schema.loader.SchemaLoader;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class JSONSchemaBenchmark2 {
@State(Scope.Thread)
public static class BenchmarkState {
// everit
private Schema jsonSchemaEverit;
private org.json.JSONObject schemasEverit;
private List<String> schemaNames;
// fastjson
private JSONSchema jsonSchemaFastjson2;
private JSONObject schemasFastjson2;
private JsonSchema jsonSchemaNetworknt;
private JsonNode schemasNetworknt;
public BenchmarkState() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
{
org.json.JSONObject root = new org.json.JSONObject(new org.json.JSONTokener(classLoader.getResourceAsStream("schema/perftest.json")));
org.json.JSONObject schemaObject = new org.json.JSONObject(new org.json.JSONTokener(classLoader.getResourceAsStream("schema/schema-draft4.json")));
jsonSchemaEverit = SchemaLoader.load(schemaObject);
schemasEverit = root.getJSONObject("schemas");
schemaNames = Arrays.asList(org.json.JSONObject.getNames(schemasEverit));
}
{
JSONObject root = JSON.parseObject(classLoader.getResource("schema/perftest.json"));
JSONObject schemaObject = JSON.parseObject(classLoader.getResource("schema/schema-draft4.json"));
jsonSchemaFastjson2 = JSONSchema.of(schemaObject);
schemasFastjson2 = root.getJSONObject("schemas");
}
try {
ObjectMapper objectMapper = new ObjectMapper();
JsonSchemaFactory factory = JsonSchemaFactory.getInstance();
ObjectReader reader = objectMapper.reader();
JsonNode schemaNode = reader.readTree(classLoader.getResourceAsStream("schema/schema-draft4.json"));
jsonSchemaNetworknt = factory.getSchema(schemaNode);
JsonNode root = reader.readTree(classLoader.getResourceAsStream("schema/perftest.json"));
schemasNetworknt = root.get("schemas");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
@Benchmark
public void everit(BenchmarkState state) {
for (String name : state.schemaNames) {
org.json.JSONObject json = (org.json.JSONObject) state.schemasEverit.get(name);
state.jsonSchemaEverit.validate(json);
}
}
@Benchmark
public void fastjson2(BenchmarkState state) {
for (String name : state.schemaNames) {
JSONObject json = state.schemasFastjson2.getJSONObject(name);
state.jsonSchemaFastjson2.validate(json);
}
}
@Benchmark
public void networknt(BenchmarkState state) {
for (String name : state.schemaNames) {
JsonNode json = state.schemasNetworknt.get(name);
state.jsonSchemaNetworknt.validate(json);
}
}
public static void main(String[] args) throws RunnerException {
Options options = new OptionsBuilder()
.include(JSONSchemaBenchmark2.class.getName())
.mode(Mode.Throughput)
.timeUnit(TimeUnit.MILLISECONDS)
.forks(1)
.build();
new Runner(options).run();
}
}