simdjson-kotlin v0.1.0

Guides

kotlinx.serialization

The simdjson-kotlin-serialization module plugs simdjson-kotlin into kotlinx.serialization: decode JSON straight into your @Serializable classes, with simdjson doing the parsing.

Decoding

Annotate your models with @Serializable, create a SimdJson instance, and decode:

kotlin
import io.github.devcrocod.simdjson.serialization.SimdJson
import kotlinx.serialization.Serializable

@Serializable
data class Twitter(val statuses: List<Status>)

@Serializable
data class Status(val user: User)

@Serializable
data class User(val default_profile: Boolean, val screen_name: String)

val json: String = loadTwitterJson()

val simdJson = SimdJson { ignoreUnknownKeys = true }
for (status in simdJson.decodeFromString<Twitter>(json).statuses) {
    if (status.user.default_profile) {
        println(status.user.screen_name)
    }
}

To decode from a UTF-8 ByteArray (skipping the String step), use decodeFromByteArray with an explicit serializer:

kotlin
import kotlinx.serialization.serializer

val twitter = simdJson.decodeFromByteArray(serializer<Twitter>(), bytes)

Configuration

SimdJson { } builds an instance via a builder, mirroring kotlinx.serialization’s Json { }:

ParameterDescription
ignoreUnknownKeysBooleanSkip JSON keys with no matching property instead of failing. Default false.
isLenientBooleanRelax the input grammar when reading values. Default false.
coerceInputValuesBooleanSubstitute the property default for a missing or null-for-non-null value. Default false.
serializersModuleSerializersModuleRegister contextual or polymorphic serializers.

Decoding only