我想知道如何通過覆寫現有物件上的一些鍵值來創建新的 jsonObject。就我而言,我有一個 jsonObjectexistingData和一個orderMap<String, Any> 型別。
// 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 條目的值不同。如果它們不匹配,則物件上的鍵應使用訂單映射中的值進行更新。我該怎么做,在 js 中我會使用 reduce,但我對 kotlin 不太熟悉,而且由于我們不能在 JsonObject 上使用 fold,我想知道我該怎么做這樣的事情?
uj5u.com熱心網友回復:
如果我理解正確,你只想要這個:
val newObject = existingData.deepCopy().apply {
for (key in relevantKeys) {
add(key, Gson().toJsonTree(order[key]))
}
}
add如果鍵已經存在,將覆寫舊值。toJsonTree將 轉換Any?為JsonElement。這是假設里面的東西order可以轉換為 JSON 而不需要更多的型別資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312838.html
上一篇:將空變數傳遞給第二個活動的意圖
