json - 从 Kotlin 对象列表创建 JSONObjects 集合
问题描述
我有一个房间数据库,我可以从中获取 a List<LearningEvent>
,然后我必须将其转换为 aCollection<JSONObject>
并返回它。我怎样才能有效地做到这一点?
这是LearningEvent
课程:
@Entity(tableName = "learningEvents")
data class LearningEvent(
@ColumnInfo(name = "learningeventid")
@PrimaryKey(autoGenerate = true)
var id: Int? = null,
var sessionId: Long,
var time: Float,
var eventType: String,
var description: String,
var feedback: String
)
这是DAO:
@Query("SELECT * FROM learningEvents WHERE sessionId = :sessionId")
suspend fun getAllLearningEvents(sessionId: Long?): List<LearningEvent>
这是我的 getEvents() 函数的非工作/非构建代码:
override suspend fun getEvents(): Collection<JSONObject> =
withContext(Dispatchers.IO) {
Log.d("\ngetEvents(eventType)", currentSessionId.toString())
if (currentSessionId === null) {
throw Exception("Current session Id is null; Session cannot be retrieved.")
}
var gson = Gson();
// Return JSON object collection of table rows.
var learningEvents = db.learningEventDao().getAllLearningEvents(currentSessionId);
var returnCollection = emptyList<JSONObject>();
learningEvents.forEach{element ->
var singleObject = gson.toJsonTree(element);
returnCollection += singleObject;
}
return@withContext returnCollection;
}
解决方案
在我看来,您可以使用.toJson
. 这里是示例代码:
var learningEvents = db.learningEventDao().getAllLearningEvents(currentSessionId);
var returnCollection = emptyList<JSONObject>();
learningEvents.forEach{ element ->
val singleObject = gson.toJson(element);
returnCollection += JSONObject(singleObject);
}