如何格式化输出kotlinx JsonElement?无对应数据类时的实现方法
Kotlinx JsonObject 格式化输出(Pretty-Print)方案
你遇到的核心问题是:直接调用JsonObject.toString()不会生成格式化的JSON字符串,且kotlinx序列化默认的格式化方法不需要依赖数据类,直接针对JsonElement处理即可。另外你的代码里还有两个小问题:
- 变量名错误:
jsonObject应该是传入的参数json JsonObject.plus()方法要求值是JsonElement类型,直接传1.1会报错,需要用JsonPrimitive(1.1)包装
正确的实现代码
import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.JsonElement fun print(json: JsonObject): String { // 修正变量名,并用JsonPrimitive包装数值 val withVersion = json + ("Version" to JsonPrimitive(1.1)) // 创建支持格式化输出的Json实例 val prettyJson = Json { prettyPrint = true prettyPrintIndent = " " // 可选,指定缩进字符,默认是4个空格 } // 直接序列化JsonElement对象,无需数据类 return prettyJson.encodeToString(JsonElement.serializer(), withVersion) }
关键说明
Json { prettyPrint = true }:开启格式化输出配置,会自动添加换行和缩进JsonElement.serializer():kotlinx序列化提供了针对JsonElement的序列化器,不需要自定义数据类就能直接序列化JsonObject.plus():该方法返回新的JsonObject,不会修改原对象,符合不可变设计
内容的提问来源于stack exchange,提问作者ModdyFire
相关产品推荐
相关产品推荐

