我正在尝试使用此代码使用IBM Watson的会话API获取结果:
import json
from watson_developer_cloud import ConversationV1
conversation = ConversationV1(
username='******',
password='*****',
version='2016-09-20')
workspace_id = '***'
response = conversation.message(workspace_id=workspace_id, message_input={
'text': 'hi'})
print(json.dumps(response, indent=2))
运行此代码将打印此JSON:
{
"intents": [
{
"confidence": 1,
"intent": "greating"
}
],
"entities": [],
"context": {
"conversation_id": "d6952ab6-e27e-4c50-8b90-01f3087bcc0e",
"system": {
"dialog_stack": [
{
"dialog_node": "root"
}
],
"dialog_request_counter": 1,
"dialog_turn_counter": 1,
"branch_exited": true,
"_node_output_map": {
"greeting": [
0
]
},
"branch_exited_reason": "completed"
}
},
"input": {
"text": "hi"
},
"output": {
"log_messages": [],
"nodes_visited": [
"greeting"
],
"text": [
"Hi I am Nao Nice to meet you"
]
},
"alternate_intents": false
}
我尝试了很多方法,但无法对此JSON进行解码。我只想得到输出文字:"嗨,我很高兴能见到你"。我怎么能这样做?
答案 0 :(得分:1)
Json是一种序列化格式,如果不先进行反序列化,则不能直接与之交互。而不是尝试从json字符串中提取信息,只需从用于创建json字符串的字典中提取它。
print(response["output"]["text"][0])
答案 1 :(得分:1)
如Kevin所述,您可以按如下方式访问各个节点段:
response['output']['text'][0]
Watson会话响应往往全部连接,因此您可以使用此方法。
'<p>'.join(response['output']['text'])
这将在每个数组项之间嵌入HTML段落,并将其作为完整字符串返回。
或者,如果您想对输出文本的每个对象执行操作。
for text in response['output']['text']:
print(text)