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.