Разговор IBM Watson: как получить доступ к объекту JSON из контекстной переменной? - PullRequest
0 голосов
/ 08 марта 2019

Я создал чат-бота, который принимает «place» в качестве входных данных и подключается к внешней службе API, передавая «place» в качестве параметра. Служба API возвращает список всех доступных сведений об аэропорте для данного места в виде объекта JSON.

Например, если в качестве входных данных в диалоге задано «Берлин», API возвращает следующий объект JSON, который затем сохраняется в контекстной переменной $ TheResult, Контекстная переменная $ TheResult содержит следующий объект JSON в качестве значения при вводе 'Berlin',

{
  "message": {
    "Places": [
      {
        "CityId": "BERL-sky",
        "CountryId": "DE-sky",
        "CountryName": "Germany",
        "PlaceId": "BERL-sky",
        "PlaceName": "Berlin",
        "RegionId": ""
      },
      {
        "CityId": "BERL-sky",
        "CountryId": "DE-sky",
        "CountryName": "Germany",
        "PlaceId": "TXL-sky",
        "PlaceName": "Berlin Tegel",
        "RegionId": ""
      },
      {
        "CityId": "BERL-sky",
        "CountryId": "DE-sky",
        "CountryName": "Germany",
        "PlaceId": "SXF-sky",
        "PlaceName": "Berlin Schoenefeld",
        "RegionId": ""
      },
      {
        "CityId": "BTVA-sky",
        "CountryId": "US-sky",
        "CountryName": "United States",
        "PlaceId": "BTV-sky",
        "PlaceName": "Burlington",
        "RegionId": "VT"
      },
      {
        "CityId": "BLIA-sky",
        "CountryId": "US-sky",
        "CountryName": "United States",
        "PlaceId": "BLI-sky",
        "PlaceName": "Bellingham",
        "RegionId": "WA"
      },
      {
        "CityId": "BRLA-sky",
        "CountryId": "US-sky",
        "CountryName": "United States",
        "PlaceId": "BRL-sky",
        "PlaceName": "Burlington",
        "RegionId": "IA"
      }
    ]
  },
  "parameters": {
    "context": "",
    "message": "",
    "service": "https://skyscanner-skyscanner-flight-search-v1.p.rapidapi.com/apiservices/autosuggest/v1.0/FI/EUR/en-US/?query=Berlin"
  }
}

Когда я использую текст ответа как Response from external server: $TheResult.message.Places, он генерирует следующий вывод:

Ответ от внешнего сервера: [{ "CityId": "BERL-небо", "CountryId": "DE-небо", "CountryName": "Германия", "PlaceId": "BERL-небо", "топоним": "Берлин", "RegionId ":" "}, {" CityId ":" BERL-небо " "CountryId": "DE-небо", "CountryName": "Германия", "PlaceId": "TXL-небо", "топоним":" Берлин Тегель», "RegionId": ""}, { "CityId": "BERL-небо", "CountryId": "DE-небо", "CountryName": "Германия", "PlaceId": "SXF-небо", «топоним»: "Берлин Шенефельд " "RegionId": ""}, { "CityId": "BTVA-небо", "CountryId": "США-небо", "CountryName":" United Государства», "PlaceId": "БТВ-небо", "топоним": "Burlington", "RegionId": "VT"}, { "CityId": "BLIA-небо", "CountryId": "США-небо" "CountryName": "United Государства», "PlaceId": "BLI-небо", "топоним": "Беллингхемы", "RegionId": "WA"}, { "CityId": "BRLA-небо", "CountryId": "США-небо" "CountryName": "United Государства», "PlaceId": "BRL-небо", "топоним": "Burlington", "RegionId": "IA"}]

Мне нужно получить доступ к первому «CityId» из объекта JSON и отобразить его в качестве выходных данных, в случае Берлина в качестве входных данных ожидаемый результат будет

Первый идентификатор города аэропорта: BERL-sky

Я попробовал ответный текст, The first airport city id is: $TheResult.message.Places.CityId выдает следующую ошибку узла диалога

Ошибка при обновлении вывода с выводом диалога идентификатор узла [узел_1_1551877430730]. Выход узла [{"generic": [{"values": [{"text": "Ответ от внешнего сервера: $ TheResult.message.Places.CityId "}]," response_type ":" Текст», "selection_policy": "последовательный"}]}] Ошибка оценки SpEL: выражение [$ TheResult.message.Places.CityId] преобразуется в [context ['TheResult']. message.Places.CityId] в позиция 37: EL1008E: свойство или поле 'CityId' не может быть найдено на объект типа 'JsonArray' - может быть, не публичный?

и текст ответа The first airport city id is: $TheResult.message.Places[0].CityId также не работали. Он не генерировал никаких ошибок, но отображает тот же вывод, что и выше, только добавляя дополнительный [0] .CityId в конце.

Первый идентификатор города аэропорта: [{ "CityId": "BERL-небо", "CountryId": "DE-небо", "CountryName": "Германия", "PlaceId": "BERL-небо", "топоним": "Берлин", "RegionId ":" "}, {" CityId ":" BERL-небо " "CountryId": "DE-небо", "CountryName": "Германия", "PlaceId": "TXL-небо", "топоним":" Берлин Тегель», "RegionId": ""}, { "CityId": "BERL-небо", "CountryId": "DE-небо", "CountryName": "Германия", "PlaceId": "SXF-небо", «топоним»: "Берлин Шенефельд " "RegionId": ""}, { "CityId": "BTVA-небо", "CountryId": "США-небо", "CountryName":" United Государства», "PlaceId": "БТВ-небо", "топоним": "Burlington", "RegionId": "VT"}, { "CityId": "BLIA-небо", "CountryId": "США-небо" "CountryName": "United Государства», "PlaceId": "BLI-небо", "топоним": "Беллингхемы", "RegionId": "WA"}, { "CityId": "BRLA-небо", "CountryId": "США-небо" "CountryName": "United Государства», "PlaceId": "BRL-небо", "топоним": "Burlington", "RegionId": "IA"}] [0] .CityId

Как мне проанализировать этот объект JSON для доступа к отдельным парам ключ-значение?

Заранее спасибо, я могу доработать вопрос при необходимости !!

1 Ответ

0 голосов
/ 08 марта 2019

Попробуйте ввести выражение пути JSON в синтаксис выражения .Там вы можете использовать полный синтаксис.Как то так:

The first airport code is <? $TheResult.message.Places[0].CityId ?>
...