Kotlin: Как получать данные с JSON

Давайте разберем, как получить конкретное значение из JSON файла, хранящегося в "assets".

Пример структуры JSON (user.json)
[
    {
        "id": 1,
        "name": "Иван",
        "email": "iv@mail.com",
        "age": 25
    },
    {
        "id": 2,
        "name": "Анна",
        "email": "an@mail.com",
        "age": 30
    }
]

Шаги для получения данных



Чтение файла из assets
val jsonString = context.assets.open("user.json").bufferedReader().use { it.readText() }

Создание модели данных
data class User(
    val id: Int,
    val name: String,
    val email: String,
    val age: Int
)

Парсинг JSON и поиск по ID
// Парсим весь JSON в список
val gson = Gson()
val users = gson.fromJson(jsonString, Array<User>::class.java).toList()

// Ищем пользователя по ID
fun getUserById(id: Int): User? {
    return users.find { it.id == id }
}

// Пример использования
val user = getUserById(1)
user?.let {
    println("Имя: ${it.name}")
    println("Email: ${it.email}")
}

Альтернативный вариант с использованием Kotlin Flow
fun getUserByIdFlow(id: Int): Flow<User?> = flow {
    emit(users.find { it.id == id })
}

Оптимизация поиска


Можно использовать HashMap для быстрого доступа:
val userMap = users.associateBy { it.id }

fun getUserByIdFast(id: Int): User? {
    return userMap[id]
}

Важные моменты


  • Всегда проверяйте существование файла перед чтением.
  • Обрабатывайте возможные ошибки парсинга.
  • При большом объеме данных рассмотрите использование базы данных вместо JSON.
  • Для частого доступа к данным лучше использовать кэширование.

Такой подход позволит вам эффективно получать нужные данные из JSON файла, хранящегося в assets.

Автор:  02.02.2026 03:43:57 pm