|
|
|
@ -168,42 +168,48 @@ public class JsonPath {
|
|
|
|
|
boolean optAsPathList = configuration.containsOption(AS_PATH_LIST); |
|
|
|
|
boolean optAlwaysReturnList = configuration.containsOption(Option.ALWAYS_RETURN_LIST); |
|
|
|
|
boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS); |
|
|
|
|
|
|
|
|
|
if (path.isFunctionPath()) { |
|
|
|
|
if (optAsPathList || optAlwaysReturnList) { |
|
|
|
|
if (optSuppressExceptions) { |
|
|
|
|
try { |
|
|
|
|
if (path.isFunctionPath()) { |
|
|
|
|
if (optAsPathList || optAlwaysReturnList) { |
|
|
|
|
if (optSuppressExceptions) { |
|
|
|
|
return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray()); |
|
|
|
|
} |
|
|
|
|
throw new JsonPathException("Options " + AS_PATH_LIST + " and " + ALWAYS_RETURN_LIST + " are not allowed when using path functions!"); |
|
|
|
|
} |
|
|
|
|
EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration); |
|
|
|
|
if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) { |
|
|
|
|
return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray()); |
|
|
|
|
} |
|
|
|
|
throw new JsonPathException("Options " + AS_PATH_LIST + " and " + ALWAYS_RETURN_LIST + " are not allowed when using path functions!"); |
|
|
|
|
} |
|
|
|
|
EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration); |
|
|
|
|
if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) { |
|
|
|
|
return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray()); |
|
|
|
|
} |
|
|
|
|
return evaluationContext.getValue(true); |
|
|
|
|
} else if (optAsPathList) { |
|
|
|
|
EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration); |
|
|
|
|
if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) { |
|
|
|
|
return (T) configuration.jsonProvider().createArray(); |
|
|
|
|
} |
|
|
|
|
return (T) evaluationContext.getPath(); |
|
|
|
|
} else { |
|
|
|
|
EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration); |
|
|
|
|
if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) { |
|
|
|
|
if (optAlwaysReturnList) { |
|
|
|
|
return evaluationContext.getValue(true); |
|
|
|
|
} else if (optAsPathList) { |
|
|
|
|
EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration); |
|
|
|
|
if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) { |
|
|
|
|
return (T) configuration.jsonProvider().createArray(); |
|
|
|
|
} |
|
|
|
|
return (T) evaluationContext.getPath(); |
|
|
|
|
} else { |
|
|
|
|
EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration); |
|
|
|
|
if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) { |
|
|
|
|
if (optAlwaysReturnList) { |
|
|
|
|
return (T) configuration.jsonProvider().createArray(); |
|
|
|
|
} else { |
|
|
|
|
return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Object res = evaluationContext.getValue(false); |
|
|
|
|
if (optAlwaysReturnList && path.isDefinite()) { |
|
|
|
|
Object array = configuration.jsonProvider().createArray(); |
|
|
|
|
configuration.jsonProvider().setArrayIndex(array, 0, res); |
|
|
|
|
return (T) array; |
|
|
|
|
} else { |
|
|
|
|
return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray()); |
|
|
|
|
return (T) res; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Object res = evaluationContext.getValue(false); |
|
|
|
|
if (optAlwaysReturnList && path.isDefinite()) { |
|
|
|
|
Object array = configuration.jsonProvider().createArray(); |
|
|
|
|
configuration.jsonProvider().setArrayIndex(array, 0, res); |
|
|
|
|
return (T) array; |
|
|
|
|
} else { |
|
|
|
|
return (T) res; |
|
|
|
|
} catch (JsonPathException ex) { |
|
|
|
|
if (optSuppressExceptions) { |
|
|
|
|
return (T) configuration.jsonProvider().createArray(); |
|
|
|
|
} |
|
|
|
|
throw ex; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|