Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 组合jsonpath表达式以读取json字符串中的2个嵌套属性_Java_Json_Slack Api_Jayway - Fatal编程技术网

Java 组合jsonpath表达式以读取json字符串中的2个嵌套属性

Java 组合jsonpath表达式以读取json字符串中的2个嵌套属性,java,json,slack-api,jayway,Java,Json,Slack Api,Jayway,我正在使用slack api(https://slack.com/api/search.messages)获取slack channel中的帖子,并使用java代码解析帖子 以下是松弛响应示例,其中松弛帖子是“matches”和“matches-previous”下的“text”: { "ok": true, "query": "\"@DTR:JQL\" in:#sydtest-reporting", "messages": { "total": 16,

我正在使用slack api(
https://slack.com/api/search.messages
)获取slack channel中的帖子,并使用java代码解析帖子

以下是松弛响应示例,其中松弛帖子是“matches”和“matches-previous”下的“text”:

    {
  "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
目前,我正在启动两个独立的
JsonPath.read(document,jsonPathExpression)
调用(上面每个jsonPathExpression调用一个),然后创建一个组合列表,如下所示:

@DTR:JQL#SYDEPS AND labels = Nov_2019_CSS_Cycle1
@DTR:2019 November Release
... many more
这种方法的问题是,尽管每个读取操作都返回排序列表,但当我合并两个列表时,排序毫无意义


我要找的是,对两个jsonPathExpression都执行一次读取操作。如果需要,我可以使用其他json库。请参考。

使用此表达式可以获得两个值:

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

$.messages.matches[*]..text

您的问题非常抽象,您使用的是什么解析器,这是客户端应用程序,还是web应用程序,从哪里来的
$.messages.
是一种模板?不确定是否相关“每个读取操作返回排序列表”是什么意思?@silentsudo我正在使用com.jayway.jsonpath.jsonpath解析器。它是一个客户。消息来自slack api响应。您将发现和排序的消息与其看似可选的嵌套“先前”消息(或者甚至“下一个”消息相结合的确切意图是什么?正如我从中看到的-但它们没有描述背后的数据模型)?从它们中选出一个排序列表真的有意义吗?按哪个属性排序?我建议给出一个具体的例子,说明预期结果与获得的结果……当我重新回答你的答案时,弹出了:PThanks@Anar。我确实试过了,但是我返回了一个巨大的列表,很难进一步解析。我需要使用2个criteria.text和previous.text进行筛选。@amit我认为这是使用JSONPath可以得到的最接近的结果,因为它不支持单独路径的并集。谢谢@Anar。您能推荐其他有帮助的库吗?@amit因为您不需要反序列化整个对象,只需要获取属性,所以您可能需要一个支持JSON树表示的库,例如Jackson、GSON等。