【问题标题】:Parse JSON from conversation service of watson in java从 java 中 watson 的对话服务中解析 JSON
【发布时间】:2017-03-06 15:28:55
【问题描述】:

我正在使用 watson 服务并尝试为我的应用程序构建一个聊天框,来自 watson API 的响应采用 JSON 格式,如下所示:

   {
  "context": {
    "conversation_id": "00d5c35d-ab4e-47d3-a7fd-2b78d57df59f",
    "system": {
      "dialog_stack": [
        {
          "dialog_node": "root"
        }
      ],
      "dialog_turn_counter": 1.0,
      "dialog_request_counter": 1.0,
      "_node_output_map": {
        "node_4_1487236585212": [
          0.0
        ]
      },
      "dialog_in_progress": false
    }
  },
  "entities": [],
  "intents": [
    {
      "confidence": 1.0,
      "intent": "Hello"
    },
    {
      "confidence": 0.0,
      "intent": "GoodBye"
    }
  ],
  "output": {
    "log_messages": [],
    "text": [
      "Welcome to my conversation app"
    ],
    "nodes_visited": [
      "node1"
    ]
  },
  "input": {
    "text": "hii"
  }
}

现在在我的应用程序中,我需要从 JSON 响应中获取“输出”键的数据,并从“输出”键中获取“文本”键。

我想要做的如下:

MessageRequest options = new MessageRequest.Builder().inputText(message).alternateIntents(true).context(context).build();



        MessageResponse response = service.message("93576d15-15a9-4029-bc07-41da7f2efa39", options).execute();


        context = response.getContext();

        /*System.out.println(context);*/

        System.out.println(response);

        try {
            JSONObject contObj = new JSONObject(response);

            System.out.println(contObj.getString("output"));


            JSONObject contObj1 = new JSONObject(contObj);
            System.out.println(contObj1);
            System.out.println("TEXT OUTPUT"+contObj1.getString("text"));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

现在包含“输出”的 sysout 给出了正确的值,但包含“文本”的 sysout 给出了 null。 任何帮助将不胜感激。谢谢

【问题讨论】:

  • 您要访问哪个文本值?
  • 嗨,如果您在 JSON 共享中看到,有一个关键的“输出”,其中有一个关键的“文本”,我说的是那个

标签: arrays json watson-conversation watson


【解决方案1】:

您好,在各种网站上搜索相同内容时遇到了很多麻烦,但没有得到任何帮助,我尝试使用 eclipse 的 ctrl+space 选项,最终得到了相同的解决方案。以后可能遇到此类问题的朋友可以参考下面的代码。

JSONObject contObj = new JSONObject(res);

            outputText = (contObj.getJSONObject("output").getJSONArray("text").get(0).toString());
            System.out.println("outputText: "+outputText);

这就是我为获得所需输出所做的工作。感谢所有在这个问题上尝试帮助我的人。

【讨论】:

  • 那只会得到一行输出。对话可以返回多行,具体取决于其编写方式。
  • 是的@SimonO'Doherty 你是绝对正确的,但在我的情况下,它只会返回一个值,如果返回多个值,那么可以在循环的帮助下跟踪这些值。跨度>
  • 或者,可以使用 google gson 项目来阅读和使用 Java 中的 JSON、好的文档和大量在线示例。
【解决方案2】:

文本”不是字符串。它是一个数组。这就是contObj.getString("text") 不起作用的原因。

我不知道 Java 的语法,但是在 Javascript 中你可以像 output.text[0] 一样访问它,所以你应该在你的代码中做同样的事情。

【讨论】:

  • 嗨@Danilo Silveira,'contObj.getString("output")' 工作正常,但是当我尝试扩展 JSON 解析并尝试解析 "text"“输出” 中,它给出一个空值。
  • 嘿伙计,我得到了相同的解决方案,无论如何感谢您的建议。您可以查看我自己的答案以供参考。
  • 是的......我的回答有误,只是编辑了。但就是这样:你必须得到“文本”数组的第一个元素,而不是“数组”字符串。干杯!
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2016-12-23
相关资源
最近更新 更多