Как проверить значение во вложенном списке ключ-значение? - PullRequest
0 голосов
/ 28 мая 2019

Я создал веб-сервис REST.

В ответе есть вложенный список с 5 ассоциациями ключ-значение в каждом списке.Я только хочу проверить, имеет ли каждое значение правильный формат (логическое, строковое или целое).

Так что это вложенный список.

{"marches": [
      {
      "id": 13,
      "libelle": "CAS",
      "libelleSite": "USA",
      "siteId": 1,
      "right": false,
      "active": true
   },
      {
      "id": 21,
      "libelle": "MQS",
      "libelleSite": "Spain",
      "siteId": 1,
      "right": false,
      "active": true
   },
      {
      "id": 1,
      "libelle": "ASCV",
      "libelleSite": "Italy",
      "siteId": 1,
      "right": false,
      "active": true
   }]
}

Я использую класс JsonSlurper для чтенияgroovy response.

import groovy.json.JsonSlurper
def responseMessage = messageExchange.response.responseContent
def json = new JsonSlurper().parseText(responseMessage)

С помощью этого следующего цикла я добиваюсь получения каждого блока списка.

marches.each { n ->
    log.info "Nested $n \n"
}

Я хочу, например, проверить, соответствует ли значение, связанное с ключом "id"«13» - это целое число и т. Д.

1 Ответ

1 голос
/ 28 мая 2019

Ты почти у цели.Внутри .each, it представляет вложенный объект:

json.marches.each { 
  assert it.id instanceof Integer  // one way to do it

  //another way
  if( !(it.libelle instanceof String) ){
    log.info "${it.id} has bad libelle"
  } 

  //one more way
  return (it.libelleSite instanceof String) &&
     (it.siteId instanceof Integer) && (it.right instanceof Boolean)
}

Если вы не заботитесь о специфике и просто хотите убедиться, что все они хороши, вы также можете использовать .every:

assert json.marches.every {
    it.id instanceof Integer &&
    it.libelle instanceof String &&
    it.libelleSite instanceof String &&
    it.active instanceof Boolean  //...and so on
}
...