Comparación de contenido JSON
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
| Name | Purpose | Possible values | Default value |
|---|---|---|---|
PropertyOrder | Determines if the order of properties in JSON objects are considered when comparing | PropertyOrder.Strict, PropertyOrder.Lenient | PropertyOrder.Lenient, i.e. order of properties DON'T matter |
ArrayOrder | Determines if the order of elements in JSON arrays are considered when comparing | ArrayOrder.Strict, ArrayOrder.Lenient | ArrayOrder.Strict, i.e. order of elements DO matter |
FieldComparison | Determines if comparison will fail if JSON objects actual contain extra properties, when compared to expected | FieldComparison.Strict, FieldComparison.Lenient | FieldComparison.Strict, i.e. extra properties will cause inequality |
NumberFormat | Determines if comparison of numbers are strict with regards to number format. For instance, if 100.0 and 100 are considered equal. | NumberFormat.Strict, NumberFormat.Lenient | NumberFormat.Lenient, i.e. number formats DON'T matter |
TypeCoercion | Determines if types will try to be coerced, for instance when a string contains a number or boolean value | TypeCoercion.Enabled, TypeCoercion.Disabled | TypeCoercion.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