Как я могу проверить значение во вложенном списке "ключ-значение"?

Я создал веб-службу 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 для чтения отличного ответа.

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», целым числом и так далее.


person Félix Mensah    schedule 28.05.2019    source источник
comment
просто используйте вложенный каждый...   -  person daggett    schedule 28.05.2019
comment
что именно вы хотите сделать с ответом? фильтровать значения или получить верный/ложный ответ?   -  person injecteer    schedule 28.05.2019
comment
Я хочу проверить, относится ли ответ к хорошему типу.   -  person Félix Mensah    schedule 28.05.2019


Ответы (1)


Ты почти там. Внутри .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
}
person thehole    schedule 28.05.2019