Пример структуры JSON (user.json)
Выделить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() }Создание модели данных
ВыделитьKotlin
data class User(
val id: Int,
val name: String,
val email: String,
val age: Int
)Парсинг JSON и поиск по ID
ВыделитьKotlin
// Парсим весь 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
ВыделитьKotlin
fun getUserByIdFlow(id: Int): Flow<User?> = flow {
emit(users.find { it.id == id })
}Оптимизация поиска
Можно использовать HashMap для быстрого доступа:
ВыделитьKotlin
val userMap = users.associateBy { it.id }
fun getUserByIdFast(id: Int): User? {
return userMap[id]
}Важные моменты
- Всегда проверяйте существование файла перед чтением.
- Обрабатывайте возможные ошибки парсинга.
- При большом объеме данных рассмотрите использование базы данных вместо JSON.
- Для частого доступа к данным лучше использовать кэширование.
Такой подход позволит вам эффективно получать нужные данные из JSON файла, хранящегося в assets.