Artigo
Larissa Prussak · Mar. 8, 2021 2min de leitura

Comparação JSON básica.

Olá comunidade Dev

Pensei em compartilhar um pequeno método que juntei para comparar 2 objetos JSON para obter o equivalente básico. Atualmente, estou trabalhando em alguma migração de dados e queria uma verificação básica para validar se a saída JSON é basicamente equivalente entre o antigo e o novo, excluindo alguns itens como carimbos de data / hora.

É um pequeno método recursivo básico, que irá transparecer quaisquer diferenças sobre uma estrutura aninhada. É muito baixa tecnologia, pois é tudo o que preciso fazer, mas achei que poderia ser útil para outras pessoas.

Ele pode aceitar um objeto ou array JSON de origem e destino e, opcionalmente, um RefNo se você quiser executá-lo em lote e rastrear as ocorrências de diferenças em um ^ zKeyTrap global. Além disso. há uma lista de exclusão para todas as chaves que sempre seriam diferentes, como ModificationTimestamps.

Sinta-se à vontade para usar e adaptar isso se for útil no uso do JSON.

ClassMethod CompareJSON(source As %String, target As %String, RefNo As %String = 1) As %Boolean
{
set Identical = 1
Set propsIteratorsource = source.%GetIterator()
While (propsIteratorsource.%GetNext(.key,.value)) {
  //Check for differences, and optionally exclude some keys
  if (value '= target.%Get(key)&&("LastModifiedTime,LocalTime"'[key)) { 
   if (source.%GetTypeOf(key)="object")||(source.%GetTypeOf(key)="array"){
tSC= ..CompareJSON(value,target.%Get(key),RefNo)  
else {
!,"Source ",key,?30,value
!,"Target ",key,?30,target.%Get(key)
     //Store a reference if running in Batch mode, for later review
^zKeyTrap(key)=RefNo
     set tSC = 0 // A mismatch means key-value is not identical
   }
  // Multiply so that any zeros bubble up
  set Identical=(Identical*tSC) 
  }  
}    
Identical
}
30
1 0 0 102
Entre ou crie uma conta para continuar