Java:如何从 Google Dialogflow V2 响应中提取参数
Java : How to extract parameters from Google Dialogflow V2 response
有谁知道如何提取 Google dialogflow v2 响应返回的参数?我能够正确地获得意图和信心,因为有高级方法可以做到这一点。但是好像没有办法得到params的parameters/list。响应包含具有参数的 google protobuf 结构。有谁知道如何从中提取参数名称和值。
这是一个示例响应
query_text: "next friday"
parameters {
fields {
key: "appointmentDate"
value {
struct_value {
fields {
key: "date"
value {
string_value: "2019-05-31T12:00:00+10:00"
}
}
}
}
}
}
all_required_params_present: true
fulfillment_messages {
text {
text: ""
}
}
intent {
name: "projects/dksjdkjsjksd-c824f/agent/intents/89a100c4973a"
display_name: "captureDate"
}
intent_detection_confidence: 1.0
language_code: "en"
会是这样的:
for (Entry<String, Value> entry : queryResult.getParameters().getFieldsMap().entrySet()) {
if (entry.getValue().getKindCase().getNumber() == Value.STRING_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " STRING VALUE: "
+ entry.getValue().getStringValue());
} else if (entry.getValue().getKindCase().getNumber() == Value.STRUCT_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " STRUCT VALUE: "
+ entry.getValue().getStructValue());
}
else if (entry.getValue().getKindCase().getNumber() == Value.NUMBER_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " NUMBER VALUE: "
+ String.valueOf(entry.getValue().getNumberValue()));
}
}
我太专注于解析原型缓冲区并将其映射到 Java bean。在花了几个小时发布了一个问题之后,我想到了一个简单的想法,那就是找到一种方法将原型缓冲区转换为 json。然后一切都很简单,因为我发现了这个 API
JsonFormat.printToString(protoMessage)
现在听起来很简单,但这都是因为我改变了我的问题解决策略,从学习原型缓冲区和解码它,而是使用原型到 json 转换器并使用 json 格式,哪个更好理解。
有谁知道如何提取 Google dialogflow v2 响应返回的参数?我能够正确地获得意图和信心,因为有高级方法可以做到这一点。但是好像没有办法得到params的parameters/list。响应包含具有参数的 google protobuf 结构。有谁知道如何从中提取参数名称和值。
这是一个示例响应
query_text: "next friday"
parameters {
fields {
key: "appointmentDate"
value {
struct_value {
fields {
key: "date"
value {
string_value: "2019-05-31T12:00:00+10:00"
}
}
}
}
}
}
all_required_params_present: true
fulfillment_messages {
text {
text: ""
}
}
intent {
name: "projects/dksjdkjsjksd-c824f/agent/intents/89a100c4973a"
display_name: "captureDate"
}
intent_detection_confidence: 1.0
language_code: "en"
会是这样的:
for (Entry<String, Value> entry : queryResult.getParameters().getFieldsMap().entrySet()) {
if (entry.getValue().getKindCase().getNumber() == Value.STRING_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " STRING VALUE: "
+ entry.getValue().getStringValue());
} else if (entry.getValue().getKindCase().getNumber() == Value.STRUCT_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " STRUCT VALUE: "
+ entry.getValue().getStructValue());
}
else if (entry.getValue().getKindCase().getNumber() == Value.NUMBER_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " NUMBER VALUE: "
+ String.valueOf(entry.getValue().getNumberValue()));
}
}
我太专注于解析原型缓冲区并将其映射到 Java bean。在花了几个小时发布了一个问题之后,我想到了一个简单的想法,那就是找到一种方法将原型缓冲区转换为 json。然后一切都很简单,因为我发现了这个 API
JsonFormat.printToString(protoMessage)
现在听起来很简单,但这都是因为我改变了我的问题解决策略,从学习原型缓冲区和解码它,而是使用原型到 json 转换器并使用 json 格式,哪个更好理解。