Kotlin中如何将二维数组格式的字符串转换为字符串数组的数组?
Kotlin解析二维JSON数组字符串的方案
你的这个字符串是标准的JSON格式二维字符串数组,完全不需要手动实现解析逻辑,直接用成熟的JSON序列化/反序列化库就能轻松搞定——手动解析不仅效率低,还容易因为边界情况(比如字符串含特殊字符)出现bug。
下面是几个Kotlin生态中常用的库及实现示例:
1. Gson(Google出品,轻量易用)
首先添加Gradle依赖:
implementation 'com.google.code.gson:gson:2.10.1'
解析代码示例:
import com.google.gson.Gson fun main() { val text = "[[\"1\", \"Steffan\", \"Hibbert\"], [\"2\", \"Shaunie\", \"Barry\"]]" val gson = Gson() // 直接解析为二维字符串数组 val data: Array<Array<String>> = gson.fromJson(text, Array<Array<String>>::class.java) // 验证结果 data.forEach { row -> println(row.joinToString(", ")) } }
2. Moshi(Square出品,Kotlin友好)
添加Gradle依赖(基础版):
implementation 'com.squareup.moshi:moshi:1.14.0'
解析代码示例:
import com.squareup.moshi.Moshi import com.squareup.moshi.Types fun main() { val text = "[[\"1\", \"Steffan\", \"Hibbert\"], [\"2\", \"Shaunie\", \"Barry\"]]" val moshi = Moshi.Builder().build() // 定义泛型类型(二维数组需要明确参数类型) val arrayType = Types.newParameterizedType(Array::class.java, Array::class.java, String::class.java) val adapter = moshi.adapter<Array<Array<String>>>(arrayType) val data = adapter.fromJson(text) ?: emptyArray() // 验证结果 data.forEach { row -> println(row.joinToString(", ")) } }
3. Jackson(老牌JSON库,功能全面)
添加Gradle依赖(Kotlin适配版):
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2'
解析代码示例:
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue fun main() { val text = "[[\"1\", \"Steffan\", \"Hibbert\"], [\"2\", \"Shaunie\", \"Barry\"]]" val mapper = jacksonObjectMapper() // 直接解析为二维字符串数组 val data: Array<Array<String>> = mapper.readValue(text) // 验证结果 data.forEach { row -> println(row.joinToString(", ")) } }
总结
这三个库都能完美处理你的字符串解析需求,选择哪个取决于项目的现有依赖:如果项目已经在用其中某个库,直接复用即可;如果是新项目,Gson和Moshi的上手门槛更低。
内容的提问来源于stack exchange,提问作者Tomasz Paciorek
相关产品推荐
相关产品推荐

