Как объединить строковое значение Dynami c с использованием ответа Groovy - JSON после его анализа для получения указанного c значения узла в JSON - PullRequest
1 голос
/ 08 января 2020

enter image description here

   slurperresponse = new JsonSlurper().parseText(responseContent)
    log.info (slurperresponse.WorkItems[0].WorkItemExternalId)

Приведенный выше код помогает мне получить значение узла "WorkItems[0].WorkItemExternalId", используя Groovy. Ниже приведен ответ.

{
   "TotalRecordCount": 1,
   "TotalPageCount": 1,
   "CurrentPage": 1,
   "BatchSize": 10,
   "WorkItems": [   {
      "WorkItemUId": "4336c111-7cd6-4938-835c-3ddc89961232",
      "WorkItemId": "20740900",
      "StackRank": "0",
      "WorkItemTypeUId": "00020040-0200-0010-0040-000000000000",
      "WorkItemExternalId": "79853"
}

Мне нужно добавить строку "WorkItems[0].WorkItemExternalId" (читаемую из файла Excel) и несколько других таких узлов динамически в "slurperresponse", чтобы получить значение узлов, а не напрямую жесткое кодирование как slurperresponse.WorkItems[0].WorkItemExternalId ..

Попытался добавить и оператор "+", но я получаю ошибку компиляции. Как еще я могу это сделать?

1 Ответ

0 голосов
/ 08 января 2020

slurperrsesponse - это объект, а не строка, поэтому конкатенация не работает

Json Slurper создает объект из входной строки. Этот объект является динамическим c по своей природе, вы можете получить к нему доступ, вы можете добавить к нему поля или изменить существующие поля. Contatenation здесь не сработает.

Вот пример:

import groovy.json.*

​def text = '{"total" : 2, "students" : [{"name": "John", "age" : 20}, {"name": "Alice", "age" : 21}] }'
def json = new JsonSlurper().parseText(text)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
json.total = 3 // alter the value of the existing field
json.city  = 'LA' // add a totally new field 
json.students[0].age++ // change the field in a list 
println json​

Это дает вывод:

[total:3, students:[[name:John, age:21], [name:Alice, age:21]], city:LA]

Теперь, если я вас правильно понял, вы Вы хотите добавить нового студента динамически, и ввод представляет собой текст, который вы прочитали из Excel. Итак, вот пример:

json.students << new JsonSlurper().parseText('{"name" : "Tom", "age" : 25}')
// now there are 3 students in the list

Обновление

Также возможно получить значения без «жесткого кодирования» имени свойства:

// option 1
println json.city // prints 'LA'
// option 2
println json.get('city') // prints 'LA' but here 'city' can be a variable
// option 3
println json['city']     // the same as option 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...