如何添加/删除/编辑 kotlinx.serialization.json.JsonObject 的值

Nik*_*tve 6 jetbrains-ide kotlin kotlin-multiplatform kotlin-multiplatform-mobile

我目前正在努力寻找向现有资产添加财产的最佳方法jsonObject(kotlinx.serialization.json.JsonObject)

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

private val content: Map<String, JsonElement>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

Мих*_*аль 15

由于此内部content映射是不可变的,因此编辑的唯一方法JsonObject是创建新映射(从旧映射中创建新映射)。幸运的是,有一个JsonObject构造函数采用Map,而且还JsonObject实现了Map接口本身。所以我建议使用以下习语:

val newJsonObj = JsonObject(oldJsonObj.toMutableMap().apply {
    // edit like ordinary mutable map
})
Run Code Online (Sandbox Code Playgroud)