重写 json via json 不同级别的路径库相同 "key"

Rewrite json via json path library in different levels with the same "key"

假设我们有一个像这样的json

{
  "data": [
    {
      "id": "...",
      "name": "...",
      "participants": {
        "data": [
          {
            "username": "...",
            "id": "...",
            "user_id": "..."
          },
          {
            "username": "...",
            "id": "...",
            "user_id": "..."
          }
        ]
      },
      "messages": {
        "data": [
          {
            "id": "...",
            "created_time": ...",
            "message": "...",
            "from": {
              "username": "...",
              "id": "...",
              "user_id": "..."
            },
            "to": {
              "data": [
                {
                  "username": "...",
                  "id": "...",
                  "user_id": "..."
                }
              ]
            }
          },
          {
            "id": "...",
            "created_time": "...",
            "message": "...",
            "from": {
              "username": "...",
              "id": "...",
              "user_id": "..."
            },
            "to": {
              "data": [
                {
                  "username": "...",
                  "id": "...",
                  "user_id": "..."
                }
              ]
            }
          },
          {
            "id": "...",
            "created_time": "...",
            "message": "...",
            "from": {
              "username": "...",
              "id": "...",
              "user_id": "..."
            },
            "to": {
              "data": [
                {
                  "username": "...",
                  "id": "...",
                  "user_id": "..."
                }
              ]
            }
          },
          {
            "id": "...",
            "created_time": "...",
            "message": "...",
            "from": {
              "username": "...",
              "id": "...",
              "user_id": "..."
            },
            "to": {
              "data": [
                {
                  "username": "...",
                  "id": "...",
                  "user_id": "..."
                }
              ]
            }
          },
          {
            "id": "...",
            "created_time": "...",
            "message": "...",
            "from": {
              "username": "...",
              "id": "...",
              "user_id": "..."
            },
            "to": {
              "data": [
                {
                  "username": "...",
                  "id": "...",
                  "user_id": "..."
                }
              ]
            }
          }],
        "paging": {
          "cursors": {
            "after": "..."
          },
          "next": "https://host/v7.0/id/messages?access_token=...fields=id%2Ccreated_time%2Cmessage%2Cfrom%2Cto%2Cis_unsupported%2Cstory%2Cattachments%2Creactions%2Cshares%7Blink%7D&limit=25&after=ZAXlKamRYSnpiM0lpT2lJeU9UTTVNell5T0RnM05qQTFOakkyTmpReU1qRTBPVFV5TWpZAME1EWXdNVEE0T0NKOQZDZD"
        }
      }
    }
  ],
  "paging": {
    "cursors": {
      "after": "..."
    },
    "next": "https://host/v7.0/id/conversations?access_token=...&fields=id%2Cname%2Cparticipants%2Cmessages%7Bid%2Ccreated_time%2Cmessage%2Cfrom%2Cto%2Cis_unsupported%2Cstory%2Cattachments%2Creactions%2Cshares%7Blink%7D%7D%2Cupdated_time&platform=instagram&limit=1&after=ZAXlKMGFXMWxjM1JoYlhBaU9qRTFPVFkwTlRjME1qVXNJblJvY21WaFpBRjlwWkFDSTZAJak0wTURJNE1qTTJOamcwTVRjeE1ETXdNRGswT1RFeU9ERXlORGt4T0RRNE16SXdPVGd3TUNKOQZDZD"
  }
}

使用的javajson路径库

        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.4.0</version>
        </dependency>

在清理过程中,应修改此 json 字符串。

        ...
        JSONArray jsonPathNextUrl = jsonContext.read(NEXT_URL_JSON_PATH_REGEX);
        ...
        if (isNotEmpty(jsonPathNextUrl)) {
            for (int i = 0; i < jsonPathNextUrl.size(); i ++) {
                 String nextJsonPath = jsonPathNextUrl.get(i).toString();
                final String nextUrl = rewritePaging(nextJsonPath, replacementUrl);
//                jsonContext.set("$..next" + "[" + i + "]", nextUrl);
            }
        }

我的问题是我不想修改此 JsonArray 中具有相同值但不同的所有“下一个”值。

但是 jsonContext.set(...[i]) 与特定项目不起作用。

我想像这样使用 json 路径的谓词功能

jsonContext.read("$..[?(@.next)]")

但它会返回 json 块,而不仅仅是确切的下一个值,因此我无法将它与我从读取过程中获得的当前搜索值进行比较。

知道该怎么做吗? :)

您正在寻找 DocumentContext class 的 map 函数。

示例:

jsonContext.map("$..next", (Object object, Configuration configuration) -> {
    return doCustomTransformation(object.toString());
});