We use JSON parsing to convert text data from the internet into objects our app can understand and use easily.
JSON parsing with Gson/Moshi in Android Kotlin
val gson = Gson() val obj = gson.fromJson(jsonString, MyDataClass::class.java) val moshi = Moshi.Builder().build() val jsonAdapter = moshi.adapter(MyDataClass::class.java) val obj = jsonAdapter.fromJson(jsonString)
Gson and Moshi are libraries that help convert JSON text to Kotlin objects and back.
You need to create a data class that matches the JSON structure.
data class User(val name: String, val age: Int) val json = "{\"name\":\"Anna\", \"age\":25}" val user = Gson().fromJson(json, User::class.java)
data class User(val name: String, val age: Int) val json = "{\"name\":\"Anna\", \"age\":25}" val moshi = Moshi.Builder().build() val adapter = moshi.adapter(User::class.java) val user = adapter.fromJson(json)
This program uses Gson to parse a JSON string into a Product object and prints its properties.
import com.google.gson.Gson data class Product(val id: Int, val title: String) fun main() { val json = "{\"id\":101, \"title\":\"Book\"}" val gson = Gson() val product = gson.fromJson(json, Product::class.java) println("Product id: ${product.id}, title: ${product.title}") }
Make sure your data class properties exactly match the JSON keys.
If JSON keys differ, use @SerializedName (Gson) or @Json annotation (Moshi) to map them.
Always handle possible exceptions when parsing JSON to avoid app crashes.
JSON parsing converts text data into Kotlin objects for easy use.
Gson and Moshi are popular libraries for JSON parsing in Android.
Define data classes that match your JSON structure before parsing.
Practice
Solution
Step 1: Understand JSON parsing role
Gson and Moshi are libraries that help convert JSON strings into Kotlin objects for easier data handling.Step 2: Identify the correct purpose
They do not create UI, manage navigation, or handle databases directly.Final Answer:
To convert JSON text into Kotlin objects -> Option AQuick Check:
JSON parsing = Convert JSON to objects [OK]
- Thinking Gson/Moshi create UI components
- Confusing JSON parsing with database handling
- Assuming they manage app navigation
{"name":"Alice","age":30}Solution
Step 1: Match JSON keys and types
The JSON has keys "name" (String) and "age" (Int).Step 2: Check Kotlin data class syntax
Correct syntax uses 'data class' with val properties and types matching JSON.Final Answer:
data class Person(val name: String, val age: Int) -> Option BQuick Check:
Data class with val and correct types = data class Person(val name: String, val age: Int) [OK]
- Using var instead of val unnecessarily
- Wrong property types (e.g., age as String)
- Missing 'val' keyword in data class
val json = "{\"name\":\"Bob\", \"age\":25}"
val person = Gson().fromJson(json, Person::class.java)
println(person.name)What will be printed?
Solution
Step 1: Parse JSON to Person object
Gson converts the JSON string into a Person object with name="Bob" and age=25.Step 2: Print the name property
println(person.name) outputs the name value, which is "Bob".Final Answer:
Bob -> Option DQuick Check:
person.name = "Bob" [OK]
- Printing age instead of name
- Expecting class name instead of property value
- Assuming null if parsing fails
val json = "{\"name\":\"Eve\", \"age\":28}"
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter(Person::class.java)
val person = adapter.fromJson(json)
println(person?.name)Assuming Person is a correct data class, why might this code fail at runtime?
Solution
Step 1: Check Moshi setup for Kotlin data classes
Moshi requires adding the KotlinJsonAdapterFactory to support Kotlin features like default values and nullability.Step 2: Identify missing adapter
The code builds Moshi without .add(KotlinJsonAdapterFactory()), so parsing may fail or produce null.Final Answer:
Missing Moshi Kotlin adapter for data class support -> Option CQuick Check:
Moshi needs KotlinJsonAdapterFactory for data classes [OK]
- Not adding KotlinJsonAdapterFactory
- Assuming JSON string is invalid
- Confusing println with logging
[{"id":1,"title":"Task 1"},{"id":2,"title":"Task 2"}]How do you parse it into a Kotlin List<Task> using Gson, assuming
data class Task(val id: Int, val title: String)?Solution
Step 1: Understand parsing JSON arrays
Gson needs a Type object to parse generic types like List<Task>.Step 2: Use TypeToken to get List<Task> type
TypeToken() {}.type provides the correct type for Gson.fromJson to parse the array.Final Answer:
Use TypeToken() {}.type with Gson.fromJson -> Option AQuick Check:
Use TypeToken for generic list parsing [OK]
- Parsing array as single object
- Manually parsing instead of using Gson
- Using toJson instead of fromJson
Ready to prove it?
Pass the test and this pattern moves unknown
