Ir al contenido principal
Versión: 5.8.x

Comparación de contenido JSON

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Este módulo está disponible para objetivos JVM y JS.

shouldEqualJson

json.shouldEqualJson(other) verifica que el lado izquierdo representa la misma estructura JSON que el lado derecho.

Este comparador permite diferencias de formato y orden de claves.

Por ejemplo, estas dos cadenas JSON se considerarían iguales:

{
"name": "sam",
"location": "chicago",
"age" : 41
}

y

{ "age" : 41, "name": "sam", "location": "chicago" }

El inverso es shouldNotEqualJson, que fallará si dos cadenas JSON son consideradas iguales.

compareJsonOptions

shouldEqualJson soporta un parámetro adicional de tipo CompareJsonOptions con estas opciones para modificar el comportamiento de la comparación:

Uso:

Las opciones pueden especificarse directamente:

a.shouldEqualJson(b, compareJsonOptions { arrayOrder = ArrayOrder.Strict })

Otra opción es definir una función de comparación personalizada:

val myOptions = compareJsonOptions {
typeCoercion = TypeCoercion.Enabled
arrayOrder = ArrayOrder.Lenient
}

infix fun String.lenientShouldEqualJson(other: String) = this.shouldEqualJson(other, myOptions)

"[1, 2]" lenientShouldEqualJson "[2, 1]" // This will pass

Parámetros

NamePurposePossible valuesDefault value
PropertyOrderDetermines if the order of properties in JSON objects are considered when comparingPropertyOrder.Strict, PropertyOrder.LenientPropertyOrder.Lenient, i.e. order of properties DON'T matter
ArrayOrderDetermines if the order of elements in JSON arrays are considered when comparingArrayOrder.Strict, ArrayOrder.LenientArrayOrder.Strict, i.e. order of elements DO matter
FieldComparisonDetermines if comparison will fail if JSON objects actual contain extra properties, when compared to expectedFieldComparison.Strict, FieldComparison.LenientFieldComparison.Strict, i.e. extra properties will cause inequality
NumberFormatDetermines if comparison of numbers are strict with regards to number format. For instance, if 100.0 and 100 are considered equal.NumberFormat.Strict, NumberFormat.LenientNumberFormat.Lenient, i.e. number formats DON'T matter
TypeCoercionDetermines if types will try to be coerced, for instance when a string contains a number or boolean valueTypeCoercion.Enabled, TypeCoercion.DisabledTypeCoercion.Disabled, i.e. types will NOT be coerced

Objetivos: Multiplataforma

shouldEqualSpecifiedJson

Alias de shouldEqualJson con opciones predeterminadas excepto FieldComparison, que usa FieldComparison.Lenient.

val a = """ { "a": true, "date": "2019-11-03" } """
val b = """ { "a": true } """

// this would pass
a shouldEqualSpecifiedJson b

// this would fail
a shouldEqualJson b

Objetivos: Multiplataforma

shouldContainJsonKey

json.shouldContainJsonKey("$.json.path") verifica que una cadena JSON contiene la ruta especificada.

El inverso es shouldNotContainJsonKey, que fallará si la cadena JSON contiene la ruta especificada.

Objetivos: JVM

shouldContainJsonKeyValue

str.shouldContainJsonKeyValue("$.json.path", value) verifica que una cadena JSON contiene un value específico en la ruta indicada.

El inverso es shouldNotContainJsonKeyValue, que fallará si la cadena JSON contiene el valor especificado en esa ruta.

Objetivos: JVM

shouldMatchJsonResource

json.shouldMatchJsonResource("/file.json") verifica que el JSON coincide con el recurso de prueba /file.json, ignorando orden y formato.

Objetivos: JVM