Объедините выражение 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