You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:05:07