Android 改进动态JSON响应

Android 改进动态JSON响应,android,json,retrofit,retrofit2,dialogflow-es,Android,Json,Retrofit,Retrofit2,Dialogflow Es,我不熟悉JSON的改型处理,但遇到了一个问题。 我们正在用Dialogflow制作一个智能助手聊天机器人原型 我的Android客户端向Google Dialogflow发送POST请求,Google Dialogflow将调用第三方API并返回响应 但是,此响应取决于Dialogflow检测到的意图类型。 它可以是几乎所有的东西,从音乐到天气信息等等。 所以参数(用于可视化)将完全不同,我事先不知道响应的类型 我在自己的云函数中预处理Dialogflow的响应,并将其发送回,其中只包含客户端所

我不熟悉JSON的改型处理,但遇到了一个问题。 我们正在用Dialogflow制作一个智能助手聊天机器人原型

我的Android客户端向Google Dialogflow发送POST请求,Google Dialogflow将调用第三方API并返回响应

但是,此响应取决于Dialogflow检测到的意图类型。 它可以是几乎所有的东西,从音乐到天气信息等等。 所以参数(用于可视化)将完全不同,我事先不知道响应的类型

我在自己的云函数中预处理Dialogflow的响应,并将其发送回,其中只包含客户端所需的字段

例如:

“布鲁塞尔今天的天气怎么样?”

答复:

{
    "sessionId": "123456789",
    "keepAlive": true,
    "intentId": 100,
    "intentName": "Weer",
    "text": "Het weer in Hanoi is helder met een temperatuur van 23.2 graden.",
    "Parameters": {
        "text": {
            "stringValue": "helder",
            "kind": "stringValue"
        },
        "city": {
            "stringValue": "Hanoi",
            "kind": "stringValue"
        },
        "temp": {
            "numberValue": 23.2,
            "kind": "numberValue"
        },
        "intentId": {
            "numberValue": 100,
            "kind": "numberValue"
        }
    }
}
您可以看到响应的参数取决于意图(id)的类型。根据意图,可以有多个或零个参数

我怎样才能对每种类型的反应做出Pojo,而不仅仅是天气


或者我可以基于intentId或其他东西制作一个开关盒吗?

您可以使用泛型而不是

public class Response<T> {
       private String responseId;
       private String sessionId;
       private boolean keepAlive;
       private float intentId;
       private String intentName;
       private String text;
       private String Audio;
       private T Parameters;
        }
公共类响应{
私有字符串响应ID;
私有字符串sessionId;
私有布尔保持;
私营部门;
私有字符串intentName;
私有字符串文本;
私有字符串音频;
私有T参数;
}
当您想要创建对象时,您可以

new Response<YourClass>();
newresponse();

您的类将是符合您意图id的类

当您请求数据时,您甚至不知道它的天气或音乐?不,这是问题:)Dialogflow将使用NLP检测查询的意思,然后形成响应。因此,我不知道事先会发生什么。您使用的JSON解析库是什么?Gsonconversionfactory for Reformation 2不幸的是,响应不是我在原始帖子中提到的简单键值对,而是一个嵌套对象,其键名取决于日期的类型。如果我知道intentId,我就知道响应将包含哪些字段。所以我想知道,在JSON转换成对象之前,我是否可以做一个切换。在这种情况下,你必须使用泛型,并且根据意图id在我更新答案时创建对象