1. 概述

在现代软件开发中,处理 JSON 数据是一项常见任务。Kotlin 中有多个库可以用于处理 JSON 数据,包括 Kotlin 官方提供的 kotlinx.serialization,以及第三方库如 org.json、Jackson 和 Gson。本文将介绍如何在 Kotlin 中使用这些库将 JSON 字符串转换为 Map

2. kotlinx.serialization

kotlinx.serialization 是 Kotlin 官方提供的一套序列化库,支持将 JSON 数据与 Kotlin 对象之间进行转换。

首先,需要在项目中添加 kotlinx-serialization-json 依赖

<dependency>
    <groupId>org.jetbrains.kotlinx</groupId>
    <artifactId>kotlinx-serialization-json</artifactId>
    <version>${serialization.version}</version>
</dependency>

该库在解析 JSON 时返回的是强类型对象,parseToJsonElement() 方法可以返回 JsonPrimitiveJsonArrayJsonObject。由于 JsonObject 继承自 Map<String, JsonElement>,因此我们可以在确认其类型后将其隐式转换为 Map

fun jsonStringToMapWithKotlinx(json: String): Map<String, JsonElement> {
    val data = Json.parseToJsonElement(json)
    require(data is JsonObject) { "Only Json Objects can be converted to a Map!" }
    return data
}

✅ 使用此方法时要注意,只能处理 JSON 对象(即 {} 包裹的内容),不能直接处理 JSON 数组或基本类型值。

3. org.json.JSONObject

org.json 包 是另一个处理 JSON 的常用库,在 Kotlin 中也能很好地使用。

首先添加依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>${org.json.version}</version>
</dependency>

接下来使用 JSONObject 类,它提供了一个构造函数用于解析 JSON 字符串。构造完成后,可以通过 toMap() 方法将其转换为 Map

fun jsonStringToMapWithOrgJosn(json: String): Map<String, Any> {
    val jsonObj = JSONObject(json)
    return jsonObj.toMap()
}

✅ 这种方式使用简单,适合快速开发场景。

4. Gson

Gson 是 Google 提供的一个非常流行的 JSON 解析库。使用前需添加依赖:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>${gson.version}</version>
</dependency>

要将 JSON 字符串转换为 Map,可以使用 Gson.fromJson() 方法,并传入一个 TypeToken 来指定泛型类型:

fun jsonStringToMapWithGson(json: String): Map<String, Any> {
    val gson = Gson()
    val type = object : TypeToken<Map<String, Any>>() {}.type
    return gson.fromJson(json, type)
}

✅ 该方法适用于需要高度灵活性的场景,尤其适合嵌套结构的 JSON 解析。

5. Jackson

Jackson 是一个功能强大、性能优异的 JSON 处理库。使用前添加依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version}</version>
</dependency>

通过 ObjectMapper 类提供的 readValue() 方法,可以将 JSON 字符串反序列化为指定类型的对象,如 Map<String, Any>

fun jsonStringToMapWithJackson(json: String): Map<String, Any> {
    val objectMapper = jacksonObjectMapper()
    return objectMapper.readValue<Map<String, Any>>(json)
}

✅ Jackson 支持复杂的类型推断和泛型,适合大型项目或性能敏感场景。

6. 总结

本文介绍了在 Kotlin 中将 JSON 字符串转换为 Map 的几种常见方式,分别使用了 kotlinx.serialization、org.json、Gson 和 Jackson 这四个库。

库名 优点 缺点
kotlinx.serialization Kotlin 官方支持,类型安全 仅适用于 Kotlin 项目
org.json 简洁易用 功能较基础,性能一般
Gson 灵活,支持泛型 需要手动指定 TypeToken
Jackson 功能强大,性能好 依赖较重,配置复杂

根据项目需求和团队熟悉程度,可以选择最适合的库来处理 JSON 数据。

完整代码示例可在 GitHub 仓库 中查看。


原始标题:JSON String to Map