从响应中提取值并填充到Kotlin中
我对科特林很陌生,正在为一个基本问题而挣扎。我有一个函数,它返回一个Json响应,其中包含以下几个字段:从响应中提取值并填充到Kotlin中,kotlin,Kotlin,我对科特林很陌生,正在为一个基本问题而挣扎。我有一个函数,它返回一个Json响应,其中包含以下几个字段: { “PersonId”: 123, “PersonType”: [ { “Age”: “10”, “Pid”: “ABC” “Ptype”: “abc” }, { “Age”: “10”, “Pid”: “
{
“PersonId”: 123,
“PersonType”: [
{
“Age”: “10”,
“Pid”: “ABC”
“Ptype”: “abc”
},
{
“Age”: “10”,
“Pid”: “PQR”,
“Ptype”: “per”
}
]
}
我有另一个函数,它有一个family对象(一个列表
),它调用上面的函数。所以我基本上需要做的是从这个响应中提取Pid,并填充具有一个名为“Pid”的字段的family对象
我不知道如何提取详细信息,然后将其填充到Kotlin中。根据您的环境,有许多选项 1.)在Android上,最常见的方法是使用GSON,如果您使用的是web端点,则GSON+改装: 假设您在JVM平台(例如Android)上,您可以使用通用Java库解析JSON,例如GSON。这里有一个很好的例子: 您需要首先定义一个,并使用它来解析JSON字符串: val article=Gson().fromJson(json,Person::class.java) 假设您的“函数”是http/restful端点,您也可以使用类似于库的改进。如果您不熟悉改型,可能值得查看以下示例: 使用改装,解决问题的步骤如下: 1.)定义与函数返回内容匹配的Kotlin数据类。 2.)使用该数据类定义改装接口。 3.)使用接口进行调用以获取函数 然后,改型将自动处理JSON解析。如果解析有效,您将拥有一个Kotlin数据类类型的对象,该对象将包含您的数据 上面的例子是针对Android的,但是如果是JVM环境,您也可以在其他配置中使用Gson和改装 2.)另一个选项是Kotlin X/序列化:
plugins {
kotlin("plugin.serialization") version "1.3.61"
}
以下是一些代码,摘自:
您必须为kotlinx序列化添加依赖项:
plugins {
kotlin("plugin.serialization") version "1.3.61"
}
(定义依赖项的代码可能会有所不同,具体取决于您的设置。有关更多信息,请查看我链接到的示例。)
3.)另一个选项是使用另一个JSON解析库
4.)在Android上,并可用(见Alexey Romanov的回答和下面的gpuntos评论)
5.)不使用第三方依赖:您必须实现自己的解析器。不使用第三方库: 在Android上,您可以编写(假设您的JSON是
val-JSON:String
)
(当然,这是简化的,省略了任何错误处理等)
在Android之外,JSON解析不包括在Java标准库中,但可能不会像现在这样算作第三方。如果没有这个限制,我肯定会使用另一个库
当然,它们都是低级的,不允许您只调用
MyService.getPid
,而是需要像上面的示例那样遍历JSON结构。最好在您拥有的函数周围添加代码,包括“响应”的类型你提到过,密码是保密的,所以我不能这样说。但我想知道的是,它可以用一些奇特的lambda函数和东西来实现吗?如果是的话,我不知道该怎么做。此外,我不能使用任何第三方JAR。返回上述响应的方法调用有点像:MyService.getPid(age,null)
如果我可以使用stream或其他东西,可能会这样。我不确定。我已经在明天完成了这个任务,我的时间不多了。请分享你的环境。安卓JVM?JS?环境是JVM,但不使用第三方库也可以实现。我在期待类似lambda函数之类的东西?例如,MyService.getPid(age,null)
此方法调用返回如上所述的响应。这不是javascript,因此默认情况下该语言中不包含此类序列化。只需使用其中一个提供的库。如果您在Android上,您可以在没有第三方库的情况下使用,如果您只想使用kotlin,您必须编写解析器,但这可能不是您想要做的。或者
JSONObject(json).getJSONArray("PersonType")[0].getString("Pid")
// returns "ABC" for the example JSON