Список записей API в Kotlin
Коллекция на сервере часто приходит как JSON-массив
в корне ответа. В Kotlin для него указывают тип
List с элементом-моделью, помеченной
@Serializable.
Адрес "/users" без суффикса возвращает все
десять учебных пользователей. После чтения тела
удобно узнать длину списка и первое имя:
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class ApiUser(val id: Int, val name: String)
fun main() {
val json = Json { ignoreUnknownKeys = true }
val client = HttpClient.newBuilder().build()
val request = HttpRequest.newBuilder()
.uri(
URI.create(
"https://jsonplaceholder.typicode.com/users",
),
)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
val users = json.decodeFromString<List<ApiUser>>(
response.body(),
)
println(users.size)
println(users.first().name)
}
Фильтр через параметры строки запроса меняет состав
массива. Для "/posts?userId=1" достаточно
модели поста с полями userId и
title:
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class ApiPost(val userId: Int, val title: String)
fun main() {
val json = Json { ignoreUnknownKeys = true }
val client = HttpClient.newBuilder().build()
val request = HttpRequest.newBuilder()
.uri(
URI.create(
"https://jsonplaceholder.typicode.com/posts?userId=1",
),
)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
val posts = json.decodeFromString<List<ApiPost>>(
response.body(),
)
println(posts.size)
}
Разберите локальную строку
["x","y","z"] в список строк и
выведите его размер.