Jackson Integration
Jackson Integration
Use krandom-jackson when you want Jackson to understand kRandom schema definitions.
Jackson 2.x only
krandom-jackson is built for Jackson 2.x (com.fasterxml.jackson.core:jackson-databind,
packages com.fasterxml.jackson.*) and brings jackson-databind 2.x transitively.
KrandomJacksonModule extends Jackson 2’s SimpleModule; it cannot be registered with a Jackson 3
(tools.jackson.*) mapper. Spring Boot 4 defaults to Jackson 3, so its auto-configured
JsonMapper does not pick the module up: use a Jackson 2 ObjectMapper, for example
KrandomJackson.newObjectMapper(), for kRandom schema serialization. Jackson 2 and Jackson 3 use
different packages and coexist on one classpath.
Dependency
Use Maven Central:
repositories {
mavenCentral()
}
dependencies {
implementation("io.github.frikit:krandom-core:2.10.0")
implementation("io.github.frikit:krandom-jackson:2.10.0")
}
Configure An ObjectMapper
import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.frikit.krandom.jackson.KrandomJackson;
ObjectMapper mapper = KrandomJackson.configure(new ObjectMapper());
KrandomJackson.newObjectMapper() is the shortest setup path:
ObjectMapper mapper = KrandomJackson.newObjectMapper();
Serialize A Schema As JSON Schema
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.frikit.krandom.generator.GeneratorConfig;
import io.github.frikit.krandom.generator.schema.Field;
import io.github.frikit.krandom.generator.schema.Schema;
import io.github.frikit.krandom.generator.schema.SchemaValueProvider;
import io.github.frikit.krandom.jackson.KrandomJackson;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
GeneratorConfig cfg = GeneratorConfig.builder()
.locale(Locale.US)
.seed(42L)
.build();
Field field = new Field(cfg);
Map<String, SchemaValueProvider> fields = new LinkedHashMap<>();
fields.put("order", field.bind("commerce.order_info"));
fields.put("company", field.bind("company.info"));
fields.put("payment", field.bind("finance.payment_info"));
Schema schema = new Schema(cfg, fields);
ObjectMapper mapper = KrandomJackson.newObjectMapper();
JsonNode jsonSchema = mapper.valueToTree(schema);
String type = jsonSchema.path("properties").path("order").path("type").asText(); // "object"
Serializing a Schema is side-effect free: it reads provider JSON Schema metadata and does not
advance seeded row generation.
Serialize Generated Rows
Generated rows are ordinary Map<String, Object> values. Composite provider outputs are Java
records, so Jackson serializes them as nested objects:
Map<String, Object> row = schema.generate();
JsonNode rowJson = mapper.valueToTree(row);
String orderNumber = rowJson.path("order").path("orderNumber").asText();
String companyName = rowJson.path("company").path("name").asText();
For non-Jackson exports, Schema also preserves composite records as structured data:
String jsonl = schema.toJsonLines(10);
String csv = schema.toCsv(10);
String xml = schema.toXml(10);
String sql = schema.toSqlInserts("public.orders", 10);
Map<String, Object> jsonSchemaMap = schema.toJsonSchema();