Groovy: Получение значения из JSON на основе объекта

#rest #groovy

Вопрос:

Итак, у меня есть JSON, который выглядит так

 {
   "_embedded" : {
      "userTaskDtoList" : [
         {
            "userTaskId" : 8,
            "userTaskDefinitionId" : "JJG",
            "userRoleId" : 8,
            "workflowId" : 9,
            "criticality" : "MEDIUM",
            **"dueDate"** : "2021-09-29T09:04:37Z",
            "dueDateFormatted" : "Tomorrow 09:04",
            "acknowledge" : false,
            "key" : 8,
         },
         {
            "userTaskId" : 10,
            "userTaskDefinitionId" : "JJP",
            "userRoleId" : 8,
            "workflowId" : 11,
            "criticality" : "MEDIUM",
            **"dueDate"** : "2021-09-29T09:06:44Z",
            "dueDateFormatted" : "Tomorrow 09:06",
            "acknowledge" : false,
            "key" : 10,
         },
         {
            "userTaskId" : 12,
            "userTaskDefinitionId" : "JJD",
            "userRoleId" : 8,
            "workflowId" : 13,
            "criticality" : "MEDIUM",
            **"dueDate"** : "2021-09-29T09:59:07Z",
            "dueDateFormatted" : "Tomorrow 09:59",
            "acknowledge" : false,
            "key" : 12,
         }
      ]
   }
}
 

Это ответ на запрос на ОТДЫХ. Что мне нужно, так это извлечь данные ключа «DueDate» ТОЛЬКО из определенного объекта и выполнить с ним некоторые проверки. Я пытаюсь использовать Groovy, чтобы решить эту проблему.

Единственное, что мне удалось сделать, это:

 import groovy.json.*

def response = context.expand( '${user tasks#Response}' )
def data = new JsonSlurper().parseText(response)

idValue = data._embedded.userTaskDtoList.dueDate
 

Который возвращает все 3 значения из ключа «DueDate» в ответе.
Я подумал, что, возможно, я могу взаимодействовать с определенным объектом на основе другого ключа, например, допустим, я получаю только значение из ключа «DueDate», который является частью объекта с «userTaskId» : 12.
Как я мог это сделать?

Любая помощь будет очень признательна.

Ответ №1:

Вы можете find записать интересующую вас запись, а затем просто взять dueDate из этого

 data._embedded.userTaskDtoList.find { it.userTaskId == 12 }.dueDate