Kotlin Multiplatform Library加载本地JSON文件方法求助
在Kotlin Multiplatform Library中读取commonMain下的JSON文件并映射为Kotlin对象
1. 配置Gradle资源目录
在库模块的build.gradle.kts中指定commonMain的资源目录,并添加多平台友好的JSON解析依赖(推荐使用kotlinx-serialization):
plugins { kotlin("multiplatform") kotlin("plugin.serialization") } kotlin { // 配置你的目标平台(Android、iOS等) androidTarget() iosX64() iosArm64() iosSimulatorArm64() sourceSets { val commonMain by getting { resources.srcDirs("src/commonMain/resources") dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") } } // 其他平台sourceSets配置保持原有内容即可 } }
2. 放置JSON资源文件
将你的JSON文件(比如app_settings.json)放到src/commonMain/resources目录下;如果需要分类存放,比如resources/data/app_settings.json,后续读取时传入路径data/app_settings.json即可。
3. 编写跨平台资源读取函数
在commonMain的Kotlin代码中实现通用的资源读取逻辑:
fun loadJsonFromResources(fileName: String): String { return Thread.currentThread().contextClassLoader.getResourceAsStream(fileName) ?.bufferedReader() ?.use { it.readText() } ?: error("Resource file $fileName not found or cannot be read") }
4. 定义数据类并解析JSON
用kotlinx-serialization定义与JSON结构匹配的数据类,再编写解析函数:
import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json @Serializable data class AppSettings( val apiBaseUrl: String, val maxRetryCount: Int, val enabledFeatures: List<String> ) fun parseJsonToSettings(jsonString: String): AppSettings { return Json.decodeFromString(jsonString) }
5. 整合调用
在业务逻辑中组合上述函数,完成从JSON到Kotlin对象的转换:
val rawJson = loadJsonFromResources("app_settings.json") val appSettings = parseJsonToSettings(rawJson)
注意事项
- 资源文件名和路径区分大小写,iOS平台对此尤为敏感
- 若偏好Gson替代kotlinx-serialization,只需替换解析逻辑,但kotlinx-serialization在KMM中更轻量化且原生支持多平台
- 测试时需验证Android和iOS平台均能正常读取资源,避免平台差异导致的路径问题
内容的提问来源于stack exchange,提问作者Ale Zala
相关产品推荐
相关产品推荐

