提问者:小点点

静态编程语言-无法从.渴望块中获取参数的值


我想知道如何通过覆盖现有对象上的一些键值来创建一个新的jsonObject。在我的例子中,我有一个jsonObject存在数据和一个Map类型的order

// order is of type Map<String, Any?>
val keys = listOf("service", "customerContact", "deliveryAddress", "deliveryZipCode", "deliveryZipArea", "deliveryCountryCode", "deliveryPhoneNumber")
val newObject = existingData
  .toMap()
  .foldLeft(jsonObject()) { acc, entry ->
    if (relevantKeys.contains(entry.key)
        && !matching(entry.value, order.get(entry.key))
    ) acc.set(entry.key, order?.get(entry.key).toString())
    else acc.set(entry.key, entry.value.asString)
  }

所以,在这里我需要检查列表是否包含jsonObject上的键,以及对象上该键的值是否与orderMap条目的值不同。如果它们与对象上的键不匹配,则应使用order Map中的值进行更新。我该如何做到这一点,在js中我会使用duce,但我不太熟悉kotlin,由于我们不能在JsonObject上使用折叠,我想知道我该如何做这样的事情?


共1个答案

匿名用户

如果我理解正确,你只是想要这个:

val newObject = existingData.deepCopy().apply {
    for (key in relevantKeys) {
        add(key, Gson().toJsonTree(order[key]))
    }
}

add将覆盖旧的值,如果键已经存在。toJsonTree任何?转换为JsonElement。这是假设order中的内容可以在没有任何类型信息的情况下转换为JSON。