如何在Python中获取JSON中的值

时间:2017-05-03 17:06:45

标签: python json

我正在尝试使用此代码使用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进行解码。我只想得到输出文字:"嗨,我很高兴能见到你"。我怎么能这样做?

2 个答案:

答案 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)