JSON
El format JSON té una implementació per defecte que es pot configurar mitjançant diferents característiques.
Configuració Json
La implementació per defecte de Json és molt estricta respecte a inputs que no són vàlids. Obliga a que els tipus siguin segurs i restringeix els valors que es poden serialitzar de tal manera que les repesentacins Json que es deriven són estàndar.
Però si vols, pots crear una instància de format JSON amb moltes característiques que no són estàndar.
Per fer-ho, has de crear la teva pròpia instància de la classe Json a partir d’una altre instància, per exemple del objecte per defecte Jsonmitjançant la función constructora Json().
Has d’especificar els valors dels paràmetres mitjançant el DSL JsonBuilder.
El resultat és una instància de format Json inmutable i thread-safe que pots guardar en un propietat top-level.
Nota. És molt recomanable que aquesta instància la facis servir en tot el projecte per motius de rendiment perquè les implementacions de format poden tenir una cache d’informació adicional específica del format respecte les classes que serialitzen.
Pretty printing
Per defecte, la sortida Json és una única línia perquè els ordinadors no necessiten que la representació Json estigui indentada, amb salts de línea i fàcil de llegir per nosaltres. Més aviat al contrari, són caràcters que fan nosa i s’han d’ignorar.
En canvi, si nosaltres hem de llegir el Json podem configurar la propoietat prettyPrint amb el valor true:
val format = Json { prettyPrint = true }
@Serializable
data class Project(val name: String, val language: String)
fun main() {
val data = Project("kotlinx.serialization", "Kotlin")
println(format.encodeToString(data))
}Pots veure que la sortida és completament llegible:
{
"name": "kotlinx.serialization",
"language": "Kotlin"
}Lenient parsing
De manera predeterminada, l’analitzador Json imposa diverses restriccions JSON perquè el resultat sigui el màxim de compatible amb les especificacions: RFC-4627.
Concretament, les claus i els literals de tipus string s’han d’escriure enre cometes (").
Les restriccion s’ignoren si el valor de la propietat isLenient és true :
val format = Json { isLenient = true }
enum class Status { SUPPORTED }
@Serializable
data class Project(val name: String, val status: Status, val votes: Int)
fun main() {
val data = format.decodeFromString<Project>("""
{
name : kotlinx.serialization,
status : SUPPORTED,
votes : "9000"
}
""")
println(data)
}Pots veure que l’objecte Json és llegeix sense problemes encara que totes les claus, els string i l’enumeració no està entre cometes, mentre que el número si.
)Estàs llegint una vista prèvia.
Inicia sessió per llegir l'article complet. Qualsevol compte obre 4 articles gratuïts al mes; l'alumnat i el professorat llegeixen les pàgines del seu curs sense límit.
Inicia sessió