Объедините выражение jsonpath, чтобы прочитать 2 вложенных свойства в строке json

Я использую slack api (https://slack.com/api/search.messages), чтобы получить сообщения в канале Slack и проанализировать сообщения с помощью кода Java.

Ниже приведен пример ответа Slack, где сообщения Slack помечаются "текстом" под "совпадениями", а совпадения - предыдущими:

    {
  "ok": true,
  "query": "\"@DTR:JQL\" in:#sydtest-reporting",
  "messages": {
    "total": 16,        
    "matches": [
      {
        "iid": "370f1cc2-aef9-4681-93f1-fa3787ce9d17",
        "team": "T9180DGJH",
        "channel": {
          "id": "C9UPLJ9D2",
          "is_channel": true,              
          "name": "sydtest-reporting",              
          "teams": [
            "T9180DGJH"
          ]
        },
        "type": "message",
        "user": "W9G7PAUCF",
        "username": "200848",
        "ts": "1568962541.016200",
        "text": "@DTR:JQL#SYDEPS AND labels = Nov_2019_CSS_Cycle1",
        "previous": {
          "type": "message",
          "user": "WGGUL08NA",
          "username": "208977",
          "ts": "1568962184.015700",
          "text": "@DTR:2019 November Release",
          "iid": "4bdb76cf-015b-4b43-9608-013b56e47820",
        },

Вышеуказанный ответ отсортирован ("сортировка", "отметка времени"). Я использую read() из библиотеки com.jayway.jsonpath.JsonPath для анализа выше json и использую следующие 2 jsonPathExpression:

$.messages.matches[*].text
$.messages.matches[*].previous.text

Сейчас я стреляю 2 отдельными JsonPath.read(document, jsonPathExpression) вызовы (один вызов для каждого jsonPathExpression выше), а затем составьте объединенный список, как показано ниже:

@DTR:JQL#SYDEPS AND labels = Nov_2019_CSS_Cycle1
@DTR:2019 November Release
... many more

Проблема с этим подходом в том, что хотя каждая операция чтения возвращает отсортированный список, когда я объединяю оба списка, сортировка бессмысленна.

Я ищу одну операцию чтения для jsonPathExpression. При необходимости я могу использовать другую json lib. Пожалуйста, направьте.

1 ответ

Вы можете получить оба значения, используя это выражение:

$.messages.matches[*]..text

Другие вопросы по тегам