【发布时间】:2019-11-29 04:43:22
【问题描述】:
我正在使用 slack api (https://slack.com/api/search.messages) 来获取 slack 频道中的帖子并使用 java 代码解析帖子。
以下是示例松弛响应,其中松弛帖子是“匹配”下的“文本”和匹配 - 上一个:
{
"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",
},
以上响应已排序(“排序”、“时间戳”)。 我正在使用 com.jayway.jsonpath.JsonPath 库中的 read() 来解析上面的 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 库。请指导。
【问题讨论】:
-
你的问题很抽象,你用的是什么解析器,这是客户端应用,还是web应用,
$.messages.是从哪里来的,是不是一种模板? -
你是什么意思“每个读取操作返回排序列表”?
-
@silentsudo 我正在使用 com.jayway.jsonpath.JsonPath 解析器。它是一个客户。消息来自 slack api 响应。
-
您将找到和排序的消息与其看似可选的嵌套“上一个”消息(甚至“下一个”,正如我从 docs 中看到的那样 - 但他们没有组合起来的确切意图是什么?虽然不描述背后的数据模型)?从它们中创建一个排序列表真的有意义吗?按哪个属性排序?我建议给出一个预期与获得结果的具体例子......
标签: java json slack-api jayway