From 029e36e7e4925bb2338b24f220b7c57aaadbda21 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Wed, 23 Mar 2016 21:22:17 +1300 Subject: [PATCH] -Additional JSONPath NotEquals fix --- .../Linq/JsonPath/JPathExecuteTests.cs | 13 +++++++++++-- .../Linq/JsonPath/QueryExpression.cs | 9 +++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Src/Newtonsoft.Json.Tests/Linq/JsonPath/JPathExecuteTests.cs b/Src/Newtonsoft.Json.Tests/Linq/JsonPath/JPathExecuteTests.cs index bd2ad725..81c6cdc1 100644 --- a/Src/Newtonsoft.Json.Tests/Linq/JsonPath/JPathExecuteTests.cs +++ b/Src/Newtonsoft.Json.Tests/Linq/JsonPath/JPathExecuteTests.cs @@ -904,7 +904,7 @@ namespace Newtonsoft.Json.Tests.Linq.JsonPath } [Test] - public void NotEqualsNullAndNonPrimativeValues() + public void NotEqualsAndNonPrimativeValues() { string json = @"[ { @@ -934,9 +934,18 @@ namespace Newtonsoft.Json.Tests.Linq.JsonPath JArray a = JArray.Parse(json); - List result = a.SelectTokens("$.[?(@.value!=null)]").ToList(); + List result = a.SelectTokens("$.[?(@.value!=1)]").ToList(); Assert.AreEqual(4, result.Count); + result = a.SelectTokens("$.[?(@.value!='2000-12-05T05:07:59-10:00')]").ToList(); + Assert.AreEqual(4, result.Count); + + result = a.SelectTokens("$.[?(@.value!=null)]").ToList(); + Assert.AreEqual(4, result.Count); + + result = a.SelectTokens("$.[?(@.value!=123)]").ToList(); + Assert.AreEqual(3, result.Count); + result = a.SelectTokens("$.[?(@.value)]").ToList(); Assert.AreEqual(4, result.Count); } diff --git a/Src/Newtonsoft.Json/Linq/JsonPath/QueryExpression.cs b/Src/Newtonsoft.Json/Linq/JsonPath/QueryExpression.cs index 4e4cfbfb..ee80d779 100644 --- a/Src/Newtonsoft.Json/Linq/JsonPath/QueryExpression.cs +++ b/Src/Newtonsoft.Json/Linq/JsonPath/QueryExpression.cs @@ -124,13 +124,10 @@ namespace Newtonsoft.Json.Linq.JsonPath { switch (Operator) { - case QueryOperator.NotEquals: - if (Value.Type == JTokenType.Null) - { - return true; - } - break; case QueryOperator.Exists: + // you can only specify primative types in a comparison + // notequals will always be true + case QueryOperator.NotEquals: return true; } }