如何为请求正文生成动态 json 对象

How to generate dynamic json object for request body

在下面的请求正文中,值“questionOne”、“questionTwo”等的数量因每个学生而异。我如何动态生成请求主体以适应键和值的变化值。

样品请求一

"quiz": {  
   "name":"Jacob",
   "sid": "STD_500",
   "questionOne":"",
   "questionTwo":""
}

样品请求二

"quiz": {  
    "name":"Annie",
    "sid": "STD_200",
    "questionOne":"",
    "questionTwo":""
    "questionThree":"",
    "questionFour":""
}

数据class:

data class Quiz (
    val name : String?,
    val sid : String?,
     val questions: HashMap<String, String>?

     )

问题应该在 json 数组中。示例:

 "quiz": {  
   "name":"Jacob",
   "sid": "STD_500",
   "questions" : [
     {"key": "questionOne", "value": ""},
     {"key": "questionTwo", "value": ""},
   ]
 }

我想唯一的方法是将测验定义为 HashMap 而不是 Quiz 对象。 我猜你现在有一个 RequestBody 这样的地方?

data class RequestBody(
    val quiz: Quiz
)

然后改成

data class RequestBody(
    val quiz: HashMap<String,String>
)

但这样的设计有点糟糕,我建议与后端一起制定 Tornike 的回答中提出的解决方案

根据您的描述,这是后端方面的错误设计决策 您应该有一个参数问题,您将在其上传递问题列表 classes

首先创建一个单独的数据class问题

data class Question (
val key:String, 
val value:String)

比设置此数据列表 class 作为请求模型中的问题参数类型

data class Quiz (
val name : String?,
val sid : String?,
val questions:List<Question>

 )

我假设您正在使用 Gson 库将数据 classes 转换为 json,反之亦然

给定情况的解决方案是为您发送给 BE 的每个问题创建单独的请求模型,

但我强烈建议不要这样做,并让后端人员更改 api 的工作方式