Bird
Raised Fist0
Android Kotlinmobile~20 mins

JSON parsing with Gson/Moshi in Android Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
JSON Parsing Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
What is the output of this Gson parsing code?
Given this Kotlin data class and Gson parsing code, what will be the value of user.name after parsing?
Android Kotlin
data class User(val id: Int, val name: String)

val json = "{\"id\":1, \"name\":\"Alice\"}"
val user = Gson().fromJson(json, User::class.java)
println(user.name)
A"Alice"
BThrows JsonSyntaxException
Cnull
D"id"
Attempts:
2 left
💡 Hint
Check how Gson maps JSON keys to data class properties.
📝 Syntax
intermediate
2:00remaining
Which Moshi adapter code correctly parses a JSON array of strings?
You want to parse this JSON array: ["apple", "banana", "cherry"] into a Kotlin List. Which Moshi adapter code is correct?
A
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter<List<String>>(String::class.java)
val fruits = adapter.fromJson(json)
B
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter<List<String>>(List::class.java)
val fruits = adapter.fromJson(json)
C
val moshi = Moshi.Builder().build()
val type = Types.newParameterizedType(List::class.java, String::class.java)
val adapter = moshi.adapter<List<String>>(type)
val fruits = adapter.fromJson(json)
D
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter<List<String>>()
val fruits = adapter.fromJson(json)
Attempts:
2 left
💡 Hint
Moshi needs a parameterized type for generic collections.
❓ lifecycle
advanced
2:00remaining
What happens if you parse invalid JSON with Gson?
Consider this code snippet parsing invalid JSON with Gson. What is the expected behavior?
Android Kotlin
val json = "{\"id\": 1, \"name\": Alice}" // Missing quotes around Alice
val user = Gson().fromJson(json, User::class.java)
AReturns a User object with name set to null
BThrows com.google.gson.JsonSyntaxException
CReturns a User object with name set to "Alice"
DReturns null without exception
Attempts:
2 left
💡 Hint
Check how Gson handles malformed JSON strings.
🧠 Conceptual
advanced
2:00remaining
Why use @Json annotation in Moshi data classes?
You have a JSON key named user_name but your Kotlin property is userName. Why use @Json(name = "user_name") annotation?
Android Kotlin
data class User(@Json(name = "user_name") val userName: String)
ATo ignore the <code>user_name</code> key during parsing
BTo rename the Kotlin property to <code>user_name</code> in the compiled code
CTo convert the property to uppercase during parsing
DTo map the JSON key <code>user_name</code> to the Kotlin property <code>userName</code>
Attempts:
2 left
💡 Hint
Think about how JSON keys and Kotlin properties can have different names.
🔧 Debug
expert
3:00remaining
Why does this Moshi parsing code throw a NullPointerException?
Given this Kotlin data class and Moshi parsing code, why does user.address.city cause a NullPointerException?
Android Kotlin
data class Address(val city: String)
data class User(val name: String, val address: Address?)

val json = "{\"name\":\"Bob\"}" // address key missing
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter(User::class.java)
val user = adapter.fromJson(json)
println(user!!.address!!.city)
ABecause the JSON is missing the address key, so address is null and accessing city causes NullPointerException
BBecause Moshi cannot parse nested data classes
CBecause the city property is not nullable
DBecause the adapter is not built correctly
Attempts:
2 left
💡 Hint
Check what happens when a JSON key is missing for a nullable property.

Practice

(1/5)
1. What is the main purpose of using Gson or Moshi in Android Kotlin apps?
easy
A. To convert JSON text into Kotlin objects
B. To create user interfaces
C. To manage app navigation
D. To handle database queries

Solution

  1. Step 1: Understand JSON parsing role

    Gson and Moshi are libraries that help convert JSON strings into Kotlin objects for easier data handling.
  2. Step 2: Identify the correct purpose

    They do not create UI, manage navigation, or handle databases directly.
  3. Final Answer:

    To convert JSON text into Kotlin objects -> Option A
  4. Quick Check:

    JSON parsing = Convert JSON to objects [OK]
Hint: Gson/Moshi = JSON to Kotlin objects [OK]
Common Mistakes:
  • Thinking Gson/Moshi create UI components
  • Confusing JSON parsing with database handling
  • Assuming they manage app navigation
2. Which of the following is the correct way to define a Kotlin data class for this JSON?
{"name":"Alice","age":30}
easy
A. class Person(var name: String, var age: String)
B. data class Person(val name: String, val age: Int)
C. data class Person(name: String, age: Int)
D. data class Person(val name: String, val age: String)

Solution

  1. Step 1: Match JSON keys and types

    The JSON has keys "name" (String) and "age" (Int).
  2. Step 2: Check Kotlin data class syntax

    Correct syntax uses 'data class' with val properties and types matching JSON.
  3. Final Answer:

    data class Person(val name: String, val age: Int) -> Option B
  4. Quick Check:

    Data class with val and correct types = data class Person(val name: String, val age: Int) [OK]
Hint: Use val and exact types matching JSON keys [OK]
Common Mistakes:
  • Using var instead of val unnecessarily
  • Wrong property types (e.g., age as String)
  • Missing 'val' keyword in data class
3. Given this code snippet using Gson:
val json = "{\"name\":\"Bob\", \"age\":25}"
val person = Gson().fromJson(json, Person::class.java)
println(person.name)

What will be printed?
medium
A. null
B. 25
C. Person
D. Bob

Solution

  1. Step 1: Parse JSON to Person object

    Gson converts the JSON string into a Person object with name="Bob" and age=25.
  2. Step 2: Print the name property

    println(person.name) outputs the name value, which is "Bob".
  3. Final Answer:

    Bob -> Option D
  4. Quick Check:

    person.name = "Bob" [OK]
Hint: fromJson maps JSON keys to object properties [OK]
Common Mistakes:
  • Printing age instead of name
  • Expecting class name instead of property value
  • Assuming null if parsing fails
4. What is wrong with this Moshi parsing code?
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?
medium
A. Person class is not a data class
B. JSON string is malformed
C. Missing Moshi Kotlin adapter for data class support
D. Using println instead of Log

Solution

  1. Step 1: Check Moshi setup for Kotlin data classes

    Moshi requires adding the KotlinJsonAdapterFactory to support Kotlin features like default values and nullability.
  2. Step 2: Identify missing adapter

    The code builds Moshi without .add(KotlinJsonAdapterFactory()), so parsing may fail or produce null.
  3. Final Answer:

    Missing Moshi Kotlin adapter for data class support -> Option C
  4. Quick Check:

    Moshi needs KotlinJsonAdapterFactory for data classes [OK]
Hint: Add KotlinJsonAdapterFactory to Moshi builder [OK]
Common Mistakes:
  • Not adding KotlinJsonAdapterFactory
  • Assuming JSON string is invalid
  • Confusing println with logging
5. You have this JSON array:
[{"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)?
hard
A. Use TypeToken() {}.type with Gson.fromJson
B. Call Gson.fromJson(json, Task::class.java)
C. Parse each JSON object manually with JSONObject
D. Use Gson.toJson(json, List::class.java)

Solution

  1. Step 1: Understand parsing JSON arrays

    Gson needs a Type object to parse generic types like List<Task>.
  2. Step 2: Use TypeToken to get List<Task> type

    TypeToken() {}.type provides the correct type for Gson.fromJson to parse the array.
  3. Final Answer:

    Use TypeToken() {}.type with Gson.fromJson -> Option A
  4. Quick Check:

    Use TypeToken for generic list parsing [OK]
Hint: Use TypeToken for lists with Gson [OK]
Common Mistakes:
  • Parsing array as single object
  • Manually parsing instead of using Gson
  • Using toJson instead of fromJson
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard