A Kotlin multiplatform library for JSON serialization providing type-safe JSON parsing and object serialization
npx @tessl/cli install tessl/maven-org-jetbrains-kotlinx--kotlinx-serialization-json-jvm@1.9.0kotlinx-serialization-json is a Kotlin multiplatform library for JSON serialization that provides type-safe JSON parsing, object serialization, and DOM-style manipulation of JSON data. It offers both high-level serialization APIs and low-level JsonElement manipulation, with extensive configuration options and platform-specific optimizations.
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0")import kotlinx.serialization.json.*
import kotlinx.serialization.SerializableFor specific components:
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.buildJsonArrayimport kotlinx.serialization.Serializable
import kotlinx.serialization.json.*
@Serializable
data class User(val name: String, val age: Int, val email: String?)
// Serialization
val user = User("Alice", 30, "alice@example.com")
val jsonString = Json.encodeToString(user)
// Result: {"name":"Alice","age":30,"email":"alice@example.com"}
// Deserialization
val deserializedUser = Json.decodeFromString<User>(jsonString)
// JSON DOM manipulation
val jsonElement = Json.parseToJsonElement("""{"users": [{"name": "Bob"}]}""")
val userName = jsonElement.jsonObject["users"]?.jsonArray?.get(0)?.jsonObject?.get("name")?.jsonPrimitive?.contentkotlinx-serialization-json is built around several key components:
High-level JSON serialization and deserialization with the Json class, supporting configuration, custom serializers, and type-safe operations.
object Json {
fun <T> encodeToString(serializer: SerializationStrategy<T>, value: T): String
fun <T> decodeFromString(deserializer: DeserializationStrategy<T>, string: String): T
inline fun <reified T> encodeToString(value: T): String
inline fun <reified T> decodeFromString(string: String): T
fun <T> encodeToJsonElement(serializer: SerializationStrategy<T>, value: T): JsonElement
fun <T> decodeFromJsonElement(deserializer: DeserializationStrategy<T>, element: JsonElement): T
inline fun <reified T> encodeToJsonElement(value: T): JsonElement
inline fun <reified T> decodeFromJsonElement(json: JsonElement): T
fun parseToJsonElement(string: String): JsonElement
val Default: Json
}
fun Json(from: Json = Json.Default, builderAction: JsonBuilder.() -> Unit): JsonJSON Document Object Model for programmatic JSON manipulation, providing type-safe access to JSON structures without predefined data classes.
sealed class JsonElement
sealed class JsonPrimitive : JsonElement {
val isString: Boolean
val content: String
}
object JsonNull : JsonPrimitive
class JsonObject(content: Map<String, JsonElement>) : JsonElement, Map<String, JsonElement>
class JsonArray(content: List<JsonElement>) : JsonElement, List<JsonElement>
// Factory functions
fun JsonPrimitive(value: Boolean?): JsonPrimitive
fun JsonPrimitive(value: Number?): JsonPrimitive
fun JsonPrimitive(value: String?): JsonPrimitive
// Extension properties
val JsonElement.jsonPrimitive: JsonPrimitive
val JsonElement.jsonObject: JsonObject
val JsonElement.jsonArray: JsonArray
val JsonPrimitive.int: Int
val JsonPrimitive.boolean: Boolean
val JsonPrimitive.double: DoubleKotlin DSL for building JSON structures programmatically with type-safe, fluent APIs.
fun buildJsonObject(builderAction: JsonObjectBuilder.() -> Unit): JsonObject
fun buildJsonArray(builderAction: JsonArrayBuilder.() -> Unit): JsonArray
class JsonObjectBuilder {
fun put(key: String, element: JsonElement): JsonElement?
fun put(key: String, value: Boolean?): JsonElement?
fun put(key: String, value: Number?): JsonElement?
fun put(key: String, value: String?): JsonElement?
fun putJsonObject(key: String, builderAction: JsonObjectBuilder.() -> Unit): JsonElement?
fun putJsonArray(key: String, builderAction: JsonArrayBuilder.() -> Unit): JsonElement?
}
class JsonArrayBuilder {
fun add(element: JsonElement): Boolean
fun add(value: Boolean?): Boolean
fun add(value: Number?): Boolean
fun add(value: String?): Boolean
fun addJsonObject(builderAction: JsonObjectBuilder.() -> Unit): Boolean
fun addJsonArray(builderAction: JsonArrayBuilder.() -> Unit): Boolean
}Comprehensive configuration options for customizing JSON serialization behavior, formatting, and parsing rules.
class JsonBuilder {
var encodeDefaults: Boolean
var explicitNulls: Boolean
var ignoreUnknownKeys: Boolean
var isLenient: Boolean
var prettyPrint: Boolean
var coerceInputValues: Boolean
var classDiscriminator: String
var allowSpecialFloatingPointValues: Boolean
var allowStructuredMapKeys: Boolean
var useArrayPolymorphism: Boolean
var useAlternativeNames: Boolean
var serializersModule: SerializersModule
}
class JsonConfiguration {
// Immutable configuration properties
}Custom serializers, transforming serializers, and advanced encoder/decoder interfaces for specialized JSON processing needs.
abstract class JsonContentPolymorphicSerializer<T>(baseClass: KClass<T>) : KSerializer<T> {
abstract fun selectDeserializer(element: JsonElement): DeserializationStrategy<T>
}
abstract class JsonTransformingSerializer<T>(tSerializer: KSerializer<T>) : KSerializer<T> {
open fun transformDeserialize(element: JsonElement): JsonElement
open fun transformSerialize(element: JsonElement): JsonElement
}
interface JsonEncoder : Encoder, CompositeEncoder {
val json: Json
fun encodeJsonElement(element: JsonElement)
}
interface JsonDecoder : Decoder, CompositeDecoder {
val json: Json
fun decodeJsonElement(): JsonElement
}Annotations for customizing JSON serialization behavior and naming strategies for property name transformation.
@Target(AnnotationTarget.PROPERTY)
annotation class JsonNames(vararg val names: String)
@Target(AnnotationTarget.CLASS)
annotation class JsonClassDiscriminator(val discriminator: String)
@Target(AnnotationTarget.CLASS)
annotation class JsonIgnoreUnknownKeys
fun interface JsonNamingStrategy {
fun serialNameForJson(descriptor: SerialDescriptor, elementIndex: Int, serialName: String): String
companion object {
val SnakeCase: JsonNamingStrategy
val KebabCase: JsonNamingStrategy
}
}Platform-specific extensions for JVM stream operations and JavaScript dynamic object interoperability.
// JVM-specific stream operations
fun <T> Json.encodeToStream(serializer: SerializationStrategy<T>, value: T, stream: OutputStream)
fun <T> Json.decodeFromStream(deserializer: DeserializationStrategy<T>, stream: InputStream): T
// JavaScript-specific dynamic object interop
fun <T> Json.decodeFromDynamic(deserializer: DeserializationStrategy<T>, dynamic: dynamic): T
fun <T> Json.encodeToDynamic(serializer: SerializationStrategy<T>, value: T): dynamicenum class ClassDiscriminatorMode {
NONE, ALL_JSON_OBJECTS, POLYMORPHIC
}
enum class DecodeSequenceMode {
WHITESPACE_SEPARATED, ARRAY_WRAPPED, AUTO_DETECT
}The library throws standard kotlinx.serialization exceptions for error conditions including SerializationException, IllegalArgumentException, and JsonDecodingException for malformed JSON.