100

{
  "active": [
    {
      "title": "ارزیابی آقای غیر حمیدیا",
      "evaluationId": "kjn4a48wd",
      "questionCount": 29,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی کارکنان تیم فنی",
      "evaluationId": "nbt16541xvf",
      "questionCount": 29,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی در مورد عماد تقی پور",
      "evaluationId": "kjnfdf1wd",
      "questionCount": 13,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی چیز دار",
      "evaluationId": "nbtdf65b4vf",
      "startDate": "876464152132",
      "questionCount": 28,
      "expireDate": "1651443210"
    }
  ],
  "abandoned": [
    {
      "title": "ارزیابی آقای حمیدیا",
      "evaluationId": "kjn4a48wd",
      "startDate": "876464152132",
      "questionCount": 17,
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی کارکنان تیم فنی",
      "evaluationId": "nbt16541xvf",
      "questionCount": 16,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی در مورد عماد تقی پور",
      "evaluationId": "kjnfdf1wd",
      "questionCount": 7,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی کارکنان تیم فنی",
      "evaluationId": "nbtdf65b4vf",
      "questionCount": 2,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    }
  ],
  "expired": [
    {
      "title": "ارزیابی آقای جعفری",
      "evaluationId": "kjn4a48wd",
      "startDate": "876464152132",
      "questionCount": 17,
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی کارکنان تیم فنی",
      "evaluationId": "nbt16541xvf",
      "questionCount": 16,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی در مورد عماد تقی پور",
      "evaluationId": "kjnfdf1wd",
      "questionCount": 7,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی کارکنان تیم فنی",
      "evaluationId": "nbtdf65b4vf",
      "questionCount": 2,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی آقای جعفری",
      "evaluationId": "kjn4a48wd",
      "startDate": "876464152132",
      "questionCount": 17,
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی کارکنان تیم فنی",
      "evaluationId": "nbt16541xvf",
      "questionCount": 16,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی در مورد عماد تقی پور",
      "evaluationId": "kjnfdf1wd",
      "questionCount": 7,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    },
    {
      "title": "ارزیابی کارکنان تیم فنی",
      "evaluationId": "nbtdf65b4vf",
      "questionCount": 2,
      "startDate": "876464152132",
      "expireDate": "1651443210"
    }
  ]
}

100

data class EvaluationListModel(
   var abandoned: List<Abandoned> = ArrayList<Abandoned> (),
   var active: List<Active> = ArrayList<Active> (),
   var expired: List<Expired> = ArrayList<Expired> ())

100

@GET("test/first.json")
suspend fun requestEvaluationList(): Response<EvaluationListModel>

100

    private fun viewModelObservers() {
    viewModel.serverEvaluationList.observe(viewLifecycleOwner){
        when(it){
            is Resource.Loading->{
                Log.d("evallist", "loading: ")
            }
            is Resource.Success->{
                Log.d("evallist", "succuss: ${it.data?.active?.size} ")
                setEvaluationDataToUi(it.data)
            }
            is Resource.Error->{
                Log.d("evallist", "error: ${it.message} ")
            }
            is Resource.Finish->{
                Log.d("evallist", "finish: ")
            }
            else->{
                Log.d("evallist", "else: ")
            }
        }
}
}

100

    @SuppressLint("SuspiciousIndentation")
private fun GetEvaluationListFromServer () = viewModelScope.launch {
    Log.d("evallist", "GetEvaluationListFromServer: ")
    serverEvaluationList.postValue(Resource.Loading())
        try {
            if(hasInternetConnection()){
                val response : Response<EvaluationListModel> = repository.requestGetEvaluationList()
                serverEvaluationList.postValue(handleGetEvaluationListFromServerRequest(response))
            }else{
                serverEvaluationList.postValue(Resource.Error(858585, app.getString(R.string.no_internet) ))
            }
        }catch (e : Exception){
            serverEvaluationList.postValue(e.localizedMessage?.let { Resource.Error(85500, it.toString()) })
        }


}





private fun handleGetEvaluationListFromServerRequest(response: Response<EvaluationListModel>): Resource<EvaluationListModel> {
    return if (response.isSuccessful) {
            serverEvaluationList.postValue(Resource.Success(response.body()))
        Resource.Success(response.body())
    }else if (response.code()==403){
        updateRefreshToken()
        Resource.Error(85403,"چنین کاربری وجود ندارد")
    }else{
        Resource.Error(85600 ,response.message())
    }
}

当数据被解析时,我的列表大小是zero,JSON是有效的.

100

我是Kotlin的新手,当我在存储库中获取数据并将其传递给视图中的ViewModel和观察者时,它会给出list.size=0

我try 了多种方法来解决这个问题,比如将数组列表更改为列表等.

Thank you!

推荐答案

毫无疑问,kotlin中的解析的future 将是kotlinx.Serialization.它是Kotlin 图书馆的一部分.版本kotlinx.Serialization1.0终于发布

https://github.com/Kotlin/kotlinx.serialization

import kotlinx.serialization.*
import kotlinx.serialization.json.JSON

@Serializable
data class MyModel(val a: Int, @Optional val b: String = "42")

fun main(args: Array<String>) {

    // serializing objects
    val jsonData = JSON.stringify(MyModel.serializer(), MyModel(42))
    println(jsonData) // {"a": 42, "b": "42"}
    
    // serializing lists
    val jsonList = JSON.stringify(MyModel.serializer().list, listOf(MyModel(42)))
    println(jsonList) // [{"a": 42, "b": "42"}]

    // parsing data back
    val obj = JSON.parse(MyModel.serializer(), """{"a":42}""")
    println(obj) // MyModel(a=42, b="42")
}

KotlinX系列化仍处于实验阶段,因此他们在新版本中引入了突破性的变化.此外,它不是线程安全的,因此如果多个线程try 使用Json的单个实例(这很常见),您的JSON可能会损坏.此外,Github的错误标签还有几个公开的问题.因此,在生产中使用它仍然是有风险的(除非您愿意花费时间修复潜在问题,并且不打算频繁更新它).这个项目确实很有趣,尤其是对于Kotlin多平台项目,但它还不稳定.

你可以使用这个图书馆

Klaxon是一个轻量级的库,用于在Kotlin中解析JSON.(:

Json相关问答推荐

将嵌套的json中的字符串强制转换为数字

为什么JQ筛选器不将原始输入打印为$var|.';文档?

解析JSON说函数parse_json不存在?

创建Json嵌套文件 struct

将PNG图像保存为Python中的JSON文件

简单条形图和有序分类中条形图的 colored颜色 梯度

Jolt-Json转换:通过引用标识符(而不是索引)设置值

如何使用 JOLT 将带有列表的 JSON 项目取消列出为多个项目?

在 JOLT 中重新排列值

嵌套 JSON 到 CSV(多级)

ORA-01422: 精确提取返回的行数超过了与 json 对象组合的请求数

jq:来自嵌套 JSON 的映射

使用 System.Text.Json 序列化记录成员

JSON Schema 与 XML Schema 的比较及其future

如何使用 C# 将 JSON 文本转换为对象

编写 JSON 日志(log)文件的格式?

将 Objective-C 对象序列化和反序列化为 JSON

在 React 中访问子级的父级状态

将 json 转换为 C# 数组?

将 Pandas 数据框转换为嵌套 JSON