首页 > 解决方案 > 如何添加/删除/编辑 kotlinx.serialization.json.JsonObject 的值

问题描述

我目前正在努力寻找将财产添加到现有jsonObject(kotlinx.serialization.json.JsonObject)

甚至我发现 JsonObject 内部有私有的不可变映射

private val content: Map<String, JsonElement>

场景:假设我已经有一个jsonObject包含 50 个属性的属性,并且考虑到任意键的 jsonObject 可以具有任意数量的深度。

对于这种情况,我们如何有效地执行以下操作:

  1. 添加原始属性
  2. 更新原始属性
  3. 删除原始属性

仅供参考:即使我发现有一个名为JsonObjectBuilder的类,但它不需要现有的 JsonElement / JsonObject / JsonArray 实际上它会新创建另一个 jsonObject。

感谢您抽出时间阅读到这里

https://github.com/Kotlin/kotlinx.serialization/issues/1593

标签: kotlinjetbrains-idekotlin-multiplatformkotlin-multiplatform-mobile

解决方案


由于这个内部content地图是不可变的,唯一的编辑方法JsonObject是创建一个新的(旧的)。幸运的是,有一个JsonObject构造函数采用 a Map,而且JsonObject实现了Map接口本身。所以我建议以下成语:

val newJsonObj = JsonObject(oldJsonObj.toMutableMap().apply {
    // edit like ordinary mutable map
})

推荐阅读