【问题标题】:How to use JSONObject from Kotlin JS如何使用 Kotlin JS 中的 JSONObject
【发布时间】:2020-07-10 20:58:03
【问题描述】:

我是 Kotlin JS 的新手。

我正在尝试将我的 android 应用程序的业务逻辑移植到 Kotlin JS。

我的应用程序使用 org.json.JsonObject 类进行自定义序列化。我不能将 KotlinX 序列化与注释一起使用,因为我的类是内联的并且不支持这些注释。

Kotlin-JS 项目使用 Gradle Kotlin DSL。我将依赖项指定为“实现(“org.json:json:20190722”)”。对于库中的任何内容,编译器都会抛出错误“未解析的引用”。我怀疑以这种方式链接到 Kotlin-JS 的 java 库是不合法的。这是真的吗?

在我的应用中实现 JsonObject 的最佳方式是什么?是否需要将源代码复制到我的项目中并自己编译成JS?

感谢您的帮助。

【问题讨论】:

    标签: kotlin-js


    【解决方案1】:

    如果您不想使用kotlinx.serizalization 库中的注解,您仍然可以将其包含在您的android 和js 平台中。

    您只需要手动构造和使用两个平台上都存在的JsonObject 类型。

    您可以在此处查看库中的 JsonObject 定义:

    https://github.com/Kotlin/kotlinx.serialization/blob/ffe216f0293231b09eea24a10aa4bc26ff6d5b90/runtime/commonMain/src/kotlinx/serialization/json/JsonElement.kt#L217

    这里是使用 kotlinx.serialization 类手动构造 JsonObject 的示例

    data class AnalyticsEvent(
        val name: Event,
        val columns: Map<Column, JsonPrimitive>? = null,
        val properties: Map<Property, JsonElement>? = null
    ) : LoggingEvent() {
        override fun toJson(): JsonObject {
            val content: MutableMap<String, JsonElement> = mutableMapOf()
    
            content[EVENT_NAME_KEY] = JsonPrimitive(name.actual)
    
            val columnJSON = columns?.mapKeys { it.key.actual }
            columnJSON?.let {
                content[EVENT_COLUMNS_KEY] = JsonObject(columnJSON)
            }
    
            val propertiesJSON = properties?.mapKeys { it.key.actual }
            propertiesJSON?.let {
                content[EVENT_PROPERTIES_KEY] = JsonObject(propertiesJSON)
            }
    
            return JsonObject(content)
        }
    

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2023-01-23
      • 2020-09-29
      相关资源
      最近更新 更多