Android 改进动态JSON响应
我不熟悉JSON的改型处理,但遇到了一个问题。 我们正在用Dialogflow制作一个智能助手聊天机器人原型 我的Android客户端向Google Dialogflow发送POST请求,Google Dialogflow将调用第三方API并返回响应 但是,此响应取决于Dialogflow检测到的意图类型。 它可以是几乎所有的东西,从音乐到天气信息等等。 所以参数(用于可视化)将完全不同,我事先不知道响应的类型 我在自己的云函数中预处理Dialogflow的响应,并将其发送回,其中只包含客户端所需的字段 例如: “布鲁塞尔今天的天气怎么样?” 答复: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的响应,并将其发送回,其中只包含客户端所
{
"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在我更新答案时创建对象