Saltar al contenido

Sintaxis JSONPath cuando el punto está en clave

Solución:

Tener una respuesta json:

{
  "0": {
    "SKU": "somevalue",
    "Merchant.Id": 234
    }
}

Puedo apuntar a una clave con a. (punto) en el nombre.

jsonPath.getJsonObject("0."Merchant.Id"")

Nota: las comillas y el hecho de que se escapen.

Nota no estoy seguro de otras versiones, pero estoy usando

‘com.jayway.restassured’, nombre: ‘json-path’, versión: ‘2.9.0’

Algunas muestras / soluciones que he visto usaban comillas simples con corchetes, pero no me funcionó.

Este problema se informó en 2007 como problema n. ° 4: los nombres de los miembros que contienen puntos fallan y se corrigen.

La solución es no presente en esta implementación en línea de jsonpath.com, pero está arreglado en este antiguo archivo y probablemente en la mayoría de las bifurcaciones que se han creado desde entonces (como aquí y aquí).

Detalles sobre el error

Una comparación entre la versión con errores y la versión corregida de 2007 del código revela que la corrección se realizó en privado. normalize función.

En la versión corregida de 2007 se lee:

normalize: function(expr) {
    var subx = [];
    return expr.replace(/[['](??(.*?))[]']|['(.*?)']/g, function($0,$1,$2){
        return "[#"+(subx.push($1||$2)-1)+"]";
    })  /* http://code.google.com/p/jsonpath/issues/detail?id=4 */
    .replace(/'?.'?|['?/g, ";")
    .replace(/;;;|;;/g, ";..;")
    .replace(/;$|'?]|'$/g, "")
    .replace(/#([0-9]+)/g, function($0,$1){
         return subx[$1];
    });
},

El primero y el ultimo replace en esa secuencia asegúrese de que el segundo replace no interpreta un punto en un nombre de propiedad como un separador de propiedad.

Eché un vistazo a las bifurcaciones más actualizadas que se han hecho desde entonces, y el código ha evolucionado enormemente desde entonces.

Conclusión:

jsonpath.com se basa en una versión desactualizada de JSONPath y no es confiable para obtener una vista previa de lo que le proporcionarían las bibliotecas actuales.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *