Kotlin-没有从其中任何一个获取参数的值.急切的块



我想知道如何从覆盖现有对象上的一些键值创建新的jsonObject。在我的情况下,我有一个jsonObjectexistingData,和一个order类型的Map<String,>

// 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)
}

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

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

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

如果键已经存在,add将覆盖旧值。toJsonTreeAny?转换为JsonElement。这是假设order内部的东西可以转换为JSON而不需要任何类型信息。

相关内容

  • 没有找到相关文章

最新更新