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 格式,哪个更好理解。