Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从响应中提取值并填充到Kotlin中_Kotlin - Fatal编程技术网

从响应中提取值并填充到Kotlin中

从响应中提取值并填充到Kotlin中,kotlin,Kotlin,我对科特林很陌生,正在为一个基本问题而挣扎。我有一个函数,它返回一个Json响应,其中包含以下几个字段: {     “PersonId”: 123,     “PersonType”: [         {             “Age”: “10”, “Pid”: “ABC”             “Ptype”: “abc”         },         {             “Age”: “10”, “Pid”: “

我对科特林很陌生,正在为一个基本问题而挣扎。我有一个函数,它返回一个Json响应,其中包含以下几个字段:

{
    “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