首页 > 解决方案 > Kotlin 将对象分组为父子关系

问题描述

我想在 Android 应用程序中实现评论会话。我的 api 给出了这样的评论列表:

"comments": [{'comid':"44", 'postid': "12", 'parentid': "12"}, 
{'comid':"55", 'postid': "12", 'parentid': "44"},
{'comid':"66", 'postid': "12", 'parentid': "55"}]

这里。第二条和第三条评论分别是子和孙子。如何将其转换为listOf(Comment())像下面这样的类对象到 parent->children->grandchildren:(基于关系parentid

data class Comment(
    val comid: String,
    val postid: String,
    val parentid: String,
    val children: List<Comment>)

结果应如下所示:

comments = [ Comment(), Comment(listOf(Child(), Child())), 
Comment(listOf(Child(listOf(Grandchild(), Grandchild())))), Comment(), Comment(), ... ]

帮助表示赞赏。

标签: androidkotlin

解决方案


如果json字符串以[开头,试试:</p>

var strList:String = "[{\"comments\": [{'comid':\"44\", 'postid': \"12\", 'parentid': \"12\", 'name':\"Alice\", 'content': \"lorem ipsum Alice\"}, \n" +
        "{'comid':\"55\", 'postid': \"12\", 'parentid': \"44\", 'name':\"Boby\", 'content': \"lorem ipsum Boby\"},\n" +
        "{'comid':\"66\", 'postid': \"12\", 'parentid': \"55\", 'name':\"Cris\", 'content': \"lorem ipsum Cris\"}]}]"

fun transferList() :List<Comment>{
    var list:List<Comment> = ArrayList();
    val gson = Gson()
    val comment: Comment = gson.fromJson(str, Comment::class.java)
    list = gson.fromJson(
        strList,
        object : TypeToken<List<Comment?>?>() {}.getType()
    )
    return list
}

尝试使用https://github.com/google/gson

data class Comment(
    val comid: String,
    val postid: String,
    val parentid: String,
    val name: String,
    val content: String,
    val comments: List<Comment>){
    
    var str:String = "{\"comments\": [{'comid':\"44\", 'postid': \"12\", 'parentid': \"12\", 'name':\"Alice\", 'content': \"lorem ipsum Alice\"}, \n" +
            "{'comid':\"55\", 'postid': \"12\", 'parentid': \"44\", 'name':\"Boby\", 'content': \"lorem ipsum Boby\"},\n" +
            "{'comid':\"66\", 'postid': \"12\", 'parentid': \"55\", 'name':\"Cris\", 'content': \"lorem ipsum Cris\"}]}"

    fun transfer() :Comment{
        val gson = Gson()
        val comment: Comment = gson.fromJson(str, Comment::class.java)
        return comment
    }
}

推荐阅读