From 017359cc3af20c996874049be88708be0f5d50b8 Mon Sep 17 00:00:00 2001 From: Ian Date: Fri, 11 Oct 2024 08:17:44 -0600 Subject: [PATCH] Allow number strings to be compared to numbers --- .../internal/filter/EvaluatorFactory.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java index 322a1719..b2730557 100755 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java @@ -102,6 +102,10 @@ public class EvaluatorFactory { return left.asNumberNode().getNumber().compareTo(right.asNumberNode().getNumber()) < 0; } if(left.isStringNode() && right.isStringNode()){ return left.asStringNode().getString().compareTo(right.asStringNode().getString()) < 0; + } if(left.isStringNode() && right.isNumberNode()){ + return left.asStringNode().getString().compareTo(right.asNumberNode().getNumber().toString()) < 0; + } if(left.isNumberNode() && right.isStringNode()){ + return left.asNumberNode().getNumber().toString().compareTo(right.asStringNode().getString()) < 0; } if (left.isOffsetDateTimeNode() && right.isOffsetDateTimeNode()){ //workaround for issue: https://github.com/json-path/JsonPath/issues/613 return left.asOffsetDateTimeNode().getDate().compareTo(right.asOffsetDateTimeNode().getDate()) < 0; } @@ -116,6 +120,10 @@ public class EvaluatorFactory { return left.asNumberNode().getNumber().compareTo(right.asNumberNode().getNumber()) <= 0; } if(left.isStringNode() && right.isStringNode()){ return left.asStringNode().getString().compareTo(right.asStringNode().getString()) <= 0; + } if(left.isStringNode() && right.isNumberNode()){ + return left.asStringNode().getString().compareTo(right.asNumberNode().getNumber().toString()) <= 0; + } if(left.isNumberNode() && right.isStringNode()){ + return left.asNumberNode().getNumber().toString().compareTo(right.asStringNode().getString()) <= 0; } if (left.isOffsetDateTimeNode() && right.isOffsetDateTimeNode()){ //workaround for issue: https://github.com/json-path/JsonPath/issues/613 return left.asOffsetDateTimeNode().getDate().compareTo(right.asOffsetDateTimeNode().getDate()) <= 0; } @@ -130,6 +138,10 @@ public class EvaluatorFactory { return left.asNumberNode().getNumber().compareTo(right.asNumberNode().getNumber()) > 0; } else if(left.isStringNode() && right.isStringNode()){ return left.asStringNode().getString().compareTo(right.asStringNode().getString()) > 0; + } else if (left.isStringNode() && right.isNumberNode()){ + return left.asStringNode().getString().compareTo(right.asNumberNode().getNumber().toString()) > 0; + } else if (left.isNumberNode() && right.isStringNode()){ + return left.asNumberNode().getNumber().toString().compareTo(right.asStringNode().getString()) > 0; } else if (left.isOffsetDateTimeNode() && right.isOffsetDateTimeNode()){ //workaround for issue: https://github.com/json-path/JsonPath/issues/613 return left.asOffsetDateTimeNode().getDate().compareTo(right.asOffsetDateTimeNode().getDate()) > 0; } @@ -144,6 +156,10 @@ public class EvaluatorFactory { return left.asNumberNode().getNumber().compareTo(right.asNumberNode().getNumber()) >= 0; } else if(left.isStringNode() && right.isStringNode()){ return left.asStringNode().getString().compareTo(right.asStringNode().getString()) >= 0; + } else if (left.isStringNode() && right.isNumberNode()){ + return left.asStringNode().getString().compareTo(right.asNumberNode().getNumber().toString()) >= 0; + } else if (left.isNumberNode() && right.isStringNode()){ + return left.asNumberNode().getNumber().toString().compareTo(right.asStringNode().getString()) >= 0; } else if (left.isOffsetDateTimeNode() && right.isOffsetDateTimeNode()){ //workaround for issue: https://github.com/json-path/JsonPath/issues/613 return left.asOffsetDateTimeNode().getDate().compareTo(right.asOffsetDateTimeNode().getDate()) >= 0; }