2017-05-03 90 views
0

我试图使用IBM沃森的通话API使用此代码来获得结果:我怎样才能获得JSON的价值在Python

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。我只想得到输出文字:“你好,我很好,很高兴见到你。”我怎样才能做到这一点?

回答

1

Json是一种序列化格式,如果不首先进行反序列化,它不会直接与之交互。而不是试图从json字符串中提取信息,只是从您用来创建json字符串的字典中提取它。

print(response["output"]["text"][0]) 
+0

很好<3我的方法是尝试解码json.dump数据,所以我不能得到任何东西<3很多谢谢你 –

0

正如凯文提到的,可以访问各个节点段如下:

response['output']['text'][0] 

沃森会话响应趋于所有连接的,所以可以使用这种方法。

'<p>'.join(response['output']['text']) 

这将在每个数组项目之间嵌入HTML段落中断并将其作为完整字符串返回。

或者如果您想对输出文本的每个对象执行操作。

for text in response['output']['text']: 
    print(text)