Lines Matching +full:- +full:- +full:json
1 <!--- TEST_NAME JsonTest -->
3 # JSON features
5 This is the fifth chapter of the [Kotlin Serialization Guide](serialization-guide.md).
6 …pter, we'll walk through features of [JSON](https://www.json.org/json-en.html) serialization avail…
10 <!--- TOC -->
12 * [Json configuration](#json-configuration)
13 * [Pretty printing](#pretty-printing)
14 * [Lenient parsing](#lenient-parsing)
15 * [Ignoring unknown keys](#ignoring-unknown-keys)
16 * [Alternative Json names](#alternative-json-names)
17 * [Coercing input values](#coercing-input-values)
18 * [Encoding defaults](#encoding-defaults)
19 * [Explicit nulls](#explicit-nulls)
20 * [Allowing structured map keys](#allowing-structured-map-keys)
21 * [Allowing special floating-point values](#allowing-special-floating-point-values)
22 * [Class discriminator for polymorphism](#class-discriminator-for-polymorphism)
23 * [Class discriminator output mode](#class-discriminator-output-mode)
24 * [Decoding enums in a case-insensitive manner](#decoding-enums-in-a-case-insensitive-manner)
25 * [Global naming strategy](#global-naming-strategy)
26 * [Json elements](#json-elements)
27 * [Parsing to Json element](#parsing-to-json-element)
28 * [Types of Json elements](#types-of-json-elements)
29 * [Json element builders](#json-element-builders)
30 * [Decoding Json elements](#decoding-json-elements)
31 * [Encoding literal Json content (experimental)](#encoding-literal-json-content-experimental)
32 * [Serializing large decimal numbers](#serializing-large-decimal-numbers)
33 …quoted value of `null` is forbidden](#using-jsonunquotedliteral-to-create-a-literal-unquoted-value…
34 * [Json transformations](#json-transformations)
35 * [Array wrapping](#array-wrapping)
36 * [Array unwrapping](#array-unwrapping)
37 * [Manipulating default values](#manipulating-default-values)
38 * [Content-based polymorphic deserialization](#content-based-polymorphic-deserialization)
39 * [Under the hood (experimental)](#under-the-hood-experimental)
40 * [Maintaining custom JSON attributes](#maintaining-custom-json-attributes)
42 <!--- END -->
44 ## Json configuration
46 The default [Json] implementation is quite strict with respect to invalid inputs. It enforces Kotli…
47 restricts Kotlin values that can be serialized so that the resulting JSON representations are stand…
48 Many non-standard JSON features are supported by creating a custom instance of a JSON _format_.
50 To use a custom JSON format configuration, create your own [Json] class instance from an existing
51 instance, such as a default `Json` object, using the [Json()] builder function. Specify parameter v…
52 …arentheses via the [JsonBuilder] DSL. The resulting `Json` format instance is immutable and thread…
53 it can be simply stored in a top-level property.
56 > may cache format-specific additional information about the classes they serialize.
58 This chapter shows configuration features that [Json] supports.
60 <!--- INCLUDE .*-json-.*
62 import kotlinx.serialization.json.*
63 -->
67 By default, the [Json] output is a single line. You can configure it to pretty print the output (th…
71 val format = Json { prettyPrint = true }
82 > You can get the full code [here](../guide/example/example-json-01.kt).
93 <!--- TEST -->
97 By default, [Json] parser enforces various JSON restrictions to be as specification-compliant as po…
98 (see [RFC-4627]). Particularly, keys and string literals must be quoted. Those restrictions can be …
99 …sonBuilder.isLenient] property. With `isLenient = true`, you can parse quite freely-formatted data:
102 val format = Json { isLenient = true }
121 > You can get the full code [here](../guide/example/example-json-02.kt).
123 You get the object, even though all keys of the source JSON, string, and enum values are unquoted, …
130 <!--- TEST -->
134 JSON format is often used to read the output of third-party services or in other dynamic environmen…
140 val format = Json { ignoreUnknownKeys = true }
153 > You can get the full code [here](../guide/example/example-json-03.kt).
161 <!--- TEST -->
163 ### Alternative Json names
165 It's not a rare case when JSON fields are renamed due to a schema version change.
166 …an use the [`@SerialName` annotation](basic-serialization.md#serial-field-names) to change the nam…
168 To support multiple JSON names for the one Kotlin property, there is the [JsonNames] annotation:
175 val project = Json.decodeFromString<Project>("""{"name":"kotlinx.serialization"}""")
177 val oldProject = Json.decodeFromString<Project>("""{"title":"kotlinx.coroutines"}""")
182 > You can get the full code [here](../guide/example/example-json-04.kt).
184 As you can see, both `name` and `title` Json fields correspond to `name` property:
193 unless you want to do some fine-tuning.
195 <!--- TEST -->
199 JSON formats that from third parties can evolve, sometimes changing the field types.
201 The default [Json] implementation is strict with respect to input types as was demonstrated in
202 the [Type safety is enforced](basic-serialization.md#type-safety-is-enforced) section. You can rela…
209 * `null` inputs for non-nullable types
212 > This list may be expanded in the future, so that [Json] instance configured with this property be…
215 See the example from the [Type safety is enforced](basic-serialization.md#type-safety-is-enforced) …
218 val format = Json { coerceInputValues = true }
231 > You can get the full code [here](../guide/example/example-json-05.kt).
239 <!--- TEST -->
245 See the [Defaults are not encoded](basic-serialization.md#defaults-are-not-encoded-by-default) sect…
250 val format = Json { encodeDefaults = true }
265 > You can get the full code [here](../guide/example/example-json-06.kt).
273 <!--- TEST -->
277 By default, all `null` values are encoded into JSON strings, but in some cases you may want to omit…
280 If you set property to `false`, fields with `null` values are not encoded into JSON even if the pro…
281 default `null` value. When decoding such JSON, the absence of a property value is treated as `null`…
285 val format = Json { explicitNulls = false }
298 val json = format.encodeToString(data)
299 println(json)
300 println(format.decodeFromString<Project>(json))
304 > You can get the full code [here](../guide/example/example-json-07.kt).
306 As you can see, `version`, `website` and `description` fields are not present in output JSON on the…
317 <!--- TEST -->
321 JSON format does not natively support the concept of a map with structured keys. Keys in JSON objec…
323 You can enable non-standard support for structured keys with
326 This is how you can serialize a map with keys of a user-defined class:
329 val format = Json { allowStructuredMapKeys = true }
343 > You can get the full code [here](../guide/example/example-json-08.kt).
345 The map with structured keys gets represented as JSON array with the following items: `[key1, value…
351 <!--- TEST -->
353 ### Allowing special floating-point values
355 By default, special floating-point values like [Double.NaN] and infinities are not supported in JSO…
356 the JSON specification prohibits it.
361 val format = Json { allowSpecialFloatingPointValues = true }
374 > You can get the full code [here](../guide/example/example-json-09.kt).
376 This example produces the following non-stardard JSON output, yet it is a widely used encoding for
383 <!--- TEST -->
391 val format = Json { classDiscriminator = "#class" }
408 > You can get the full code [here](../guide/example/example-json-10.kt).
411 control over the resulting JSON object:
417 <!--- TEST -->
419 …cify different class discriminators for different hierarchies. Instead of Json instance property, …
438 Discriminator specified in the annotation has priority over discriminator in Json configuration:
440 <!--- INCLUDE
452 -->
456 val format = Json { classDiscriminator = "#class" }
464 > You can get the full code [here](../guide/example/example-json-11.kt).
472 <!--- TEST -->
476 … for serializing and deserializing [polymorphic class hierarchies](polymorphism.md#sealed-classes).
484 val format = Json { classDiscriminatorMode = ClassDiscriminatorMode.NONE }
500 > You can get the full code [here](../guide/example/example-json-12.kt).
511 <!--- TEST -->
513 ### Decoding enums in a case-insensitive manner
515 [Kotlin's naming policy recommends](https://kotlinlang.org/docs/coding-conventions.html#property-na…
516 using either uppercase underscore-separated names or upper camel case names.
517 [Json] uses exact Kotlin enum values names for decoding by default.
518 However, sometimes third-party JSONs have such values named in lowercase or some mixed case.
519 In this case, it is possible to decode enum values in a case-insensitive manner using [JsonBuilder.…
522 val format = Json { decodeEnumsCaseInsensitive = true }
534 > You can get the full code [here](../guide/example/example-json-13.kt).
544 <!--- TEST -->
548 If properties' names in Json input are different from Kotlin ones, it is recommended to specify the…
549 for each property explicitly using [`@SerialName` annotation](basic-serialization.md#serial-field-n…
552 …Json] instance. `kotlinx.serialization` provides one strategy implementation out of the box, the […
558 val format = Json { namingStrategy = JsonNamingStrategy.SnakeCase }
566 > You can get the full code [here](../guide/example/example-json-14.kt).
579 non-transformed names, [JsonNames] annotation can be used instead.
586 … strategies are not friendly to actions like Find Usages/Rename in IDE, full-text search by grep, …
592 <!--- TEST -->
594 ## Json elements
596 Aside from direct conversions between strings and JSON objects, Kotlin serialization offers APIs th…
597 other ways of working with JSON in the code. For example, you might need to tweak the data before i…
603 ### Parsing to Json element
605 A string can be _parsed_ into an instance of [JsonElement] with the [Json.parseToJsonElement] funct…
607 It just parses a JSON and forms an object representing it:
611 val element = Json.parseToJsonElement("""
618 > You can get the full code [here](../guide/example/example-json-15.kt).
620 A `JsonElement` prints itself as a valid JSON:
626 <!--- TEST -->
628 ### Types of Json elements
630 A [JsonElement] class has three direct subtypes, closely following JSON grammar:
632 * [JsonPrimitive] represents primitive JSON elements, such as string, number, boolean, and null.
637 * [JsonArray] represents a JSON `[...]` array. It is a Kotlin [List] of `JsonElement` items.
639 * [JsonObject] represents a JSON `{...}` object. It is a Kotlin [Map] from `String` keys to `JsonEl…
644 and similar ones for other types. This is how you can use them for processing JSON whose structure …
648 val element = Json.parseToJsonElement("""
661 > You can get the full code [here](../guide/example/example-json-16.kt).
669 <!--- TEST -->
673 ### Json element builders
676 [buildJsonArray] and [buildJsonObject]. They provide a DSL to define the resulting JSON structure. …
677 is similar to Kotlin standard library collection builders, but with a JSON-specific convenience
678 of more type-specific overloads and inner builder functions. The following example shows
701 > You can get the full code [here](../guide/example/example-json-17.kt).
703 As a result, you get a proper JSON string:
709 <!--- TEST -->
711 ### Decoding Json elements
714 the [Json.decodeFromJsonElement] function:
725 val data = Json.decodeFromJsonElement<Project>(element)
730 > You can get the full code [here](../guide/example/example-json-18.kt).
738 <!--- TEST -->
740 ### Encoding literal Json content (experimental)
742 …is experimental and requires opting-in to [the experimental Kotlinx Serialization API](compatibili…
749 The JSON specification does not restrict the size or precision of numbers, however it is not possib…
759 val format = Json { prettyPrint = true }
776 > You can get the full code [here](../guide/example/example-json-19.kt).
778 Even though `pi` was defined as a number with 30 decimal places, the resulting JSON does not reflec…
779 …s truncated to 15 decimal places, and the String is wrapped in quotes - which is not a JSON number.
788 <!--- TEST -->
795 val format = Json { prettyPrint = true }
800 // use JsonUnquotedLiteral to encode raw JSON content
816 > You can get the full code [here](../guide/example/example-json-20.kt).
828 <!--- TEST -->
832 (This demonstration uses a [JsonPrimitive] for simplicity. For a more re-usable method of handling …
833 [Json Transformations](#json-transformations) below.)
846 val piObject: JsonObject = Json.decodeFromString(piObjectJson)
856 > You can get the full code [here](../guide/example/example-json-21.kt).
858 …act value of `pi` is decoded, with all 30 decimal places of precision that were in the source JSON.
864 <!--- TEST -->
878 > You can get the full code [here](../guide/example/example-json-22.kt).
881 …x.serialization.json.internal.JsonEncodingException: Creating a literal unquoted value of 'null' i…
884 <!--- TEST LINES_START -->
887 ## Json transformations
889 To affect the shape and contents of JSON output after serialization, or adapt input to deserializat…
893 serializer to a problem of manipulating a Json elements tree.
899 …nteraction with `Encoder` or `Decoder`, this class asks you to supply transformations for JSON tree
905 The first example is an implementation of JSON array wrapping for lists.
907 Consider a REST API that returns a JSON array of `User` objects, or a single object (not wrapped in…
913 <!--- INCLUDE
915 -->
931 …section [Constructing collection serializers](serializers.md#constructing-collection-serializers)):
941 Now you can test the code with a JSON array or a single JSON object as inputs.
945 println(Json.decodeFromString<Project>("""
948 println(Json.decodeFromString<Project>("""
954 > You can get the full code [here](../guide/example/example-json-23.kt).
963 <!--- TEST -->
967 …plement the `transformSerialize` function to unwrap a single-element list into a single JSON object
970 <!--- INCLUDE
984 -->
993 <!--- INCLUDE
995 -->
997 Now, if you serialize a single-element list of objects from Kotlin:
1002 println(Json.encodeToString(data))
1006 > You can get the full code [here](../guide/example/example-json-24.kt).
1008 You end up with a single JSON object, not an array with one element:
1014 <!--- TEST -->
1018 Another kind of useful transformation is omitting specific values from the output JSON, for example…
1022 but you need it omitted from the JSON when it is equal to `Kotlin` (we can all agree that Kotlin sh…
1024 the [Plugin-generated serializer](serializers.md#plugin-generated-serializer) for the `Project` cla…
1032 // Filter out top-level key value pair with the key "language" and the value "Kotlin"
1034 (k, v) -> k == "language" && v.jsonPrimitive.content == "Kotlin"
1039 In the example below, we are serializing the `Project` class at the top-level, so we explicitly
1040 pass the above `ProjectSerializer` to [Json.encodeToString] function as was shown in
1041 the [Passing a serializer manually](serializers.md#passing-a-serializer-manually) section:
1046 println(Json.encodeToString(data)) // using plugin-generated serializer
1047 println(Json.encodeToString(ProjectSerializer, data)) // using custom serializer
1051 > You can get the full code [here](../guide/example/example-json-25.kt).
1060 <!--- TEST -->
1062 ### Content-based polymorphic deserialization
1065 (also known as _class discriminator_) in the incoming JSON object to determine the actual serializer
1069 the actual type by the shape of JSON, for example by the presence of a specific key.
1075 …have to be `sealed` as recommended in the [Sealed classes](polymorphism.md#sealed-classes) section,
1076 > because we are not going to take advantage of the plugin-generated code that automatically select…
1079 <!--- INCLUDE
1081 -->
1098 the `owner` key in the JSON object.
1103 "owner" in element.jsonObject -> OwnedProject.serializer()
1104 else -> BasicProject.serializer()
1109 When you use this serializer to serialize data, either [registered](polymorphism.md#registered-subc…
1118 val string = Json.encodeToString(ListSerializer(ProjectSerializer), data)
1120 println(Json.decodeFromString(ListSerializer(ProjectSerializer), string))
1124 > You can get the full code [here](../guide/example/example-json-26.kt).
1126 No class discriminator is added in the JSON output:
1133 <!--- TEST -->
1142 Here are some useful things about custom serializers with [Json]:
1144 …der] can be cast to [JsonEncoder], and [Decoder] to [JsonDecoder], if the current format is [Json].
1148 * Both [`JsonDecoder`][JsonDecoder.json] and [`JsonEncoder`][JsonEncoder.json] have the `json` prop…
1149 which returns [Json] instance with all settings that are currently in use.
1150 * [Json] has the [encodeToJsonElement][Json.encodeToJsonElement] and [decodeFromJsonElement][Json.d…
1152 Given all that, it is possible to implement two-stage conversion `Decoder -> JsonElement -> value` …
1153 `value -> JsonElement -> Encoder`.
1157 <!--- INCLUDE
1160 -->
1178 // Decoder -> JsonDecoder
1179 require(decoder is JsonDecoder) // this class can be decoded only by Json
1180 // JsonDecoder -> JsonElement
1182 // JsonElement -> value
1185 return Response.Ok(decoder.json.decodeFromJsonElement(dataSerializer, element))
1189 // Encoder -> JsonEncoder
1190 require(encoder is JsonEncoder) // This class can be encoded only by Json
1191 // value -> JsonElement
1193 is Response.Ok -> encoder.json.encodeToJsonElement(dataSerializer, value.data)
1194 is Response.Error -> buildJsonObject { put("error", value.message) }
1196 // JsonElement -> JsonEncoder
1214 val string = Json.encodeToString(responses)
1216 println(Json.decodeFromString<List<Response<Project>>>(string))
1220 > You can get the full code [here](../guide/example/example-json-27.kt).
1222 This gives you fine-grained control on the representation of the `Response` class in the JSON outpu…
1229 <!--- TEST -->
1231 ### Maintaining custom JSON attributes
1233 A good example of custom JSON-specific serializer would be a deserializer
1234 that packs all unknown JSON properties into a dedicated field of `JsonObject` type.
1238 <!--- INCLUDE
1241 -->
1247 However, the default plugin-generated serializer requires details
1248 to be a separate JSON object and that's not what we want.
1250 To mitigate that, write an own serializer that uses the fact that it works only with the `Json` for…
1260 // Cast to JSON-specific interface
1261 val jsonInput = decoder as? JsonDecoder ?: error("Can be deserialized only by JSON")
1262 // Read the whole content as JSON
1263 val json = jsonInput.decodeJsonElement().jsonObject
1265 val name = json.getValue("name").jsonPrimitive.content
1266 val details = json.toMutableMap()
1277 Now it can be used to read flattened JSON details as `UnknownProject`:
1281 …println(Json.decodeFromString(UnknownProjectSerializer, """{"type":"unknown","name":"example","mai…
1285 > You can get the full code [here](../guide/example/example-json-28.kt).
1291 <!--- TEST -->
1293 ---
1298 <!-- references -->
1299 [RFC-4627]: https://www.ietf.org/rfc/rfc4627.txt
1302 <!-- stdlib references -->
1303 [Double]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/
1304 [Double.NaN]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/-na-n.html
1305 [List]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/
1306 [Map]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/
1308 <!--- MODULE /kotlinx-serialization-core -->
1309 <!--- INDEX kotlinx-serialization-core/kotlinx.serialization -->
1311 …://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-seri…
1312 …linlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-inheritabl…
1313 …tps://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k…
1314 …ttps://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-…
1316 <!--- INDEX kotlinx-serialization-core/kotlinx.serialization.encoding -->
1318 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.encodi…
1319 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.encodi…
1321 <!--- MODULE /kotlinx-serialization-json -->
1322 <!--- INDEX kotlinx-serialization-json/kotlinx.serialization.json -->
1324 [Json]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.seriali…
1325 [Json()]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.seria…
1326 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1327 …lang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-bui…
1328 …inlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-b…
1329 ….org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builder…
1330 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1331 ….org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builder…
1332 …g.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builde…
1333 …lang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-bui…
1334 …ang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-buil…
1335 …g/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builder/al…
1336 …i/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builder/allow-…
1337 …nlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-bu…
1338 …otlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-jso…
1339 …rg/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builder/c…
1340 …rg/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-class-discrimi…
1341 …kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-class-discriminator-m…
1342 …inx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-class-discriminator-mode/…
1343 …org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builder/…
1344 …lang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-bui…
1345 …tlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json…
1346 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1347 [Json.parseToJsonElement]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-j…
1348 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1349 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1350 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1351 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1352 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1353 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/j…
1354 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/j…
1355 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/j…
1356 …ps://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.jso…
1357 …/kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/in…
1358 …ps://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.jso…
1359 …/kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/lo…
1360 …otlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/buil…
1361 …otlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/buil…
1362 [Json.decodeFromJsonElement]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serializatio…
1363 …linlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-…
1364 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1365 …nlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-tr…
1366 [Json.encodeToString]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/…
1367 …ng.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-conte…
1368 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1369 …//kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-…
1370 …ng.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-decod…
1371 …ng.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-encod…
1372 …JsonDecoder.json]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kot…
1373 …JsonEncoder.json]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kot…
1374 [Json.encodeToJsonElement]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-…
1376 <!--- END -->