Estou tentando validar se os valores de todos os atributos de um objeto JSON em uma matriz JSON correspondem a outro superconjunto de objetos JSON em outra matriz JSON com alguns ajustes.
Então, eu estava tentando usar match each
with karate.jsonPath
, mas parece que isso não é possível. Existe uma solução mais simplificada para isso além de criar uma função?
Exemplo:
Digamos que eu tenha um subconjunto de uma matriz JSON como esta:
def subSet = [{userName: "JohnSmith", firstName: "John", lastName: "Smith", grade: 6.7}, {userName: "JohnDoe", firstName: "John", lastName: "Doe", grade: 6.9}, {userName: "WillSmith", firstName: "Will", lastName: "Smith", grade: 6.5}]
E um superconjunto de JSON como este:
def superSet = [{USERNAME: "JohnSmith", FIRSTNAME: "John", LASTNAME: "Smith", GRADE: "6.7"}, {USERNAME: "BruceWayne", FIRSTNAME: "Bruce", LASTNAME: "Wayne", GRADE: "6.2"}, {USERNAME: "JohnDoe", FIRSTNAME: "John", LASTNAME: "Doe", GRADE: "6.9"}, {USERNAME: "JaneDoe", FIRSTNAME: "Jane", LASTNAME: "Doe", GRADE: "6.1"}, {USERNAME: "WillSmith", FIRSTNAME: "Will", LASTNAME: "Smith", GRADE: "6.5"}]
Observe a diferença no caso das chaves e também o valor da chave 'grade'
é float em subSet
e string em superSet
.
Então, o que estou tentando é assim:
* match each subSet contains {grade: '#? _ == karate.jsonPath(superSet, "$[?(@.FIRSTNAME == _$.firstName && @.LASTNAME == _$.lastName)]")[0].GRADE * 1'}
Existe uma maneira de combinar isso em uma única linha?
Pessoalmente, eu faria uma única transformação antes de uma partida tão complexa, pois seria muito mais fácil para outros entenderem e manterem.
Fazer uma transformação JSON é fácil usando uma operação "map".
Para mais detalhes sobre as transformações JS que você pode fazer, consulte: https://stackoverflow.com/a/76091034/143475