https://kotlinlang.org/docs/coding-conventions.html#documentation-comments
/**
* The main entry point to work with JSON serialization.
* It is typically used by constructing an application-specific instance, with configured JSON-specific behaviour
* and, if necessary, registered in [SerializersModule] custom serializers.
* `Json` instance can be configured in its `Json {}` factory function using [JsonBuilder].
* For demonstration purposes or trivial usages, Json [companion][Json.Default] can be used instead.
*
* Then constructed instance can be used either as regular [SerialFormat] or [StringFormat]
* or for converting objects to [JsonElement] back and forth.
*
* This is the only serial format which has the first-class [JsonElement] support.
* Any serializable class can be serialized to or from [JsonElement] with [Json.decodeFromJsonElement] and [Json.encodeToJsonElement] respectively or
* serialize properties of [JsonElement] type.
*
* Example of usage:
* ```
* @Serializable
* data class Data(val id: Int, val data: String, val extensions: JsonElement)
*
* val json = Json { ignoreUnknownKeys = true }
* val instance = Data(42, "some data", buildJsonObject { put("key", "value") })
*
* // Plain Json usage: returns '{"id": 42, "some data", "extensions": {"key": "value" } }'
* val jsonString: String = json.encodeToString(instance)
*
* // JsonElement serialization, specific for JSON format
* val jsonElement: JsonElement = json.encodeToJsonElement(instance)
*
* // Deserialize from string
* val deserialized: Data = json.decodeFromString<Data>(jsonString)
*
* // Deserialize from json element, JSON-specific
* val deserializedFromElement: Data = json.decodeFromJsonElement<Data>(jsonElement)
*
* // Deserialize from string to JSON tree, JSON-specific
* val deserializedElement: JsonElement = json.parseToJsonElement(jsonString)
*
* // Deserialize a stream of a single item from an input stream
* val sequence = Json.decodeToSequence<Data>(ByteArrayInputStream(jsonString.encodeToByteArray()))
* for (item in sequence) {
* println(item) // Prints deserialized Data value
* }
* ```
*
* Json instance also exposes its [configuration] that can be used in custom serializers
* that rely on [JsonDecoder] and [JsonEncoder] for customizable behaviour.
*
* Json format configuration can be refined using the corresponding constructor:
* ```
* val defaultJson = Json {
* encodeDefaults = true
* ignoreUnknownKeys = true
* }
* // Will inherit the properties of defaultJson
* val debugEndpointJson = Json(defaultJson) {
* // ignoreUnknownKeys and encodeDefaults are set to true
* prettyPrint = true
* }
* ```
*/
https://www.jetbrains.com/help/idea/javadocs.html#add-new-comment