Wednesday, March 30, 2022

jetpack compose - Kotlinx serialization build json element

MainActivity.kt

package com.cfsuman.composenetwork

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.cfsuman.composenetwork.ui.theme.ComposeNetworkTheme
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.*


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ComposeNetworkTheme {
                Scaffold(
                    topBar = {
                        TopAppBar(
                            title = {
                                Text(
                                    "Serialization Build Json Element"
                                )
                            }
                        )
                    },
                    content = { MainContent()}
                )
            }
        }
    }
}


@Composable
fun MainContent() {
    val element = buildJsonObject {
        put("firstName","Jenny")
        put("lastName","Jones")
        put("age",30)
        putJsonObject("dept"){
            put("name","Development")
        }
        putJsonArray("skills"){
            addJsonObject { put("language","Kotlin") }
            addJsonObject { put("language","Java") }
            addJsonObject { put("language","C#") }
        }
    }

    val format = Json { prettyPrint = true }
    val prettyElement = format.encodeToString(element)

    Column(Modifier.fillMaxSize().padding(24.dp)) {
        Text(
            text = prettyElement,
            style = MaterialTheme.typography.h6
        )
    }
}